├── .gitignore
├── 404.html
├── LICENSE
├── README.md
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── app.html
├── apple-touch-icon.png
├── assets
├── JSON
│ └── errors.json
├── css
│ ├── bulma.css
│ ├── cropbox.css
│ ├── fonts.css
│ ├── frame.css
│ └── main.css
├── error
│ ├── 403.html
│ ├── 404.html
│ ├── 503.html
│ ├── failed.html
│ ├── proxy_detection.html
│ └── unknown.html
├── fonts
│ └── montserrat
│ │ ├── Montserrat-Black.woff
│ │ ├── Montserrat-Black.woff2
│ │ ├── Montserrat-BlackItalic.woff
│ │ ├── Montserrat-BlackItalic.woff2
│ │ ├── Montserrat-Bold.woff
│ │ ├── Montserrat-Bold.woff2
│ │ ├── Montserrat-BoldItalic.woff
│ │ ├── Montserrat-BoldItalic.woff2
│ │ ├── Montserrat-ExtraBold.woff
│ │ ├── Montserrat-ExtraBold.woff2
│ │ ├── Montserrat-ExtraBoldItalic.woff
│ │ ├── Montserrat-ExtraBoldItalic.woff2
│ │ ├── Montserrat-ExtraLight.woff
│ │ ├── Montserrat-ExtraLight.woff2
│ │ ├── Montserrat-ExtraLightItalic.woff
│ │ ├── Montserrat-ExtraLightItalic.woff2
│ │ ├── Montserrat-Italic.woff
│ │ ├── Montserrat-Italic.woff2
│ │ ├── Montserrat-Light.woff
│ │ ├── Montserrat-Light.woff2
│ │ ├── Montserrat-LightItalic.woff
│ │ ├── Montserrat-LightItalic.woff2
│ │ ├── Montserrat-Medium.woff
│ │ ├── Montserrat-Medium.woff2
│ │ ├── Montserrat-MediumItalic.woff
│ │ ├── Montserrat-MediumItalic.woff2
│ │ ├── Montserrat-Regular.woff
│ │ ├── Montserrat-Regular.woff2
│ │ ├── Montserrat-SemiBold.woff
│ │ ├── Montserrat-SemiBold.woff2
│ │ ├── Montserrat-SemiBoldItalic.woff
│ │ ├── Montserrat-SemiBoldItalic.woff2
│ │ ├── Montserrat-Thin.woff
│ │ ├── Montserrat-Thin.woff2
│ │ ├── Montserrat-ThinItalic.woff
│ │ ├── Montserrat-ThinItalic.woff2
│ │ └── stylesheet.css
├── img
│ ├── background.jpeg
│ ├── cutout.svg
│ ├── footer-cutout.svg
│ ├── halfheight-cutout.svg
│ └── logo.png
├── js
│ ├── analytics.js
│ ├── api.js
│ ├── cookie.js
│ ├── cropbox.js
│ ├── depend.js
│ ├── gamemanger.js
│ ├── inject.js
│ ├── main.js
│ ├── nav.js
│ ├── notification.js
│ ├── page.js
│ ├── profile.js
│ └── tab.js
├── pages
│ ├── cropper.html
│ ├── featured.html
│ ├── profile.html
│ └── settings.html
└── public
│ ├── gs
│ ├── emulator.html
│ ├── game.html
│ └── gameframe.html
│ └── pages
│ └── comments.html
├── auth.html
├── config.json
├── development
└── contribute.md
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── home.html
├── index.html
├── logout.html
├── package-lock.json
├── package.json
├── server
├── index.js
└── mirror.js
└── site.webmanifest
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /server/mirror
3 | .gitpod.yml
--------------------------------------------------------------------------------
/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | 404 | GameHub
15 |
16 |
17 |
18 |
19 |
20 |
Error 404
21 |
The page you tried to access could not be found. Home
22 |
23 |
24 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | GameHub
5 |
6 | A privacy centered, feature packed and easily deployable game site.
7 | Looking for the link? Play gamehub here.
8 |
9 |
10 | Join our discord server for announcements, links and updates.
11 |
12 |
13 |
14 |
15 | Deploy GameHub
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Host the GameHub API Proxy
28 |
29 |
30 | You can find the open source code for the api proxy here.
31 |
32 |
33 | Contributors
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/android-chrome-192x192.png
--------------------------------------------------------------------------------
/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/android-chrome-512x512.png
--------------------------------------------------------------------------------
/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | GameHub
15 |
16 |
17 |
18 |
19 |
60 |
61 |
62 |
63 |
64 |
65 | Games
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
¯\(°_o)/¯
96 |
97 |
Oops, we couldn't find the game you were looking for. Join our discord to suggest a game.
98 |
99 |
100 |
101 |
102 |
103 |
133 |
134 |
135 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
--------------------------------------------------------------------------------
/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/apple-touch-icon.png
--------------------------------------------------------------------------------
/assets/JSON/errors.json:
--------------------------------------------------------------------------------
1 | [403, 404, 408, 503, "failed", "unknown"]
--------------------------------------------------------------------------------
/assets/css/cropbox.css:
--------------------------------------------------------------------------------
1 | @import url('/assets/css/fonts.css');
2 |
3 | * {
4 | font-family: montserrat;
5 | }
6 |
7 | .imageBox {
8 | position: relative;
9 | height: 400px;
10 | width: 400px;
11 | border: 1px solid #aaa;
12 | overflow: hidden;
13 | background-repeat: no-repeat;
14 | cursor: move;
15 | }
16 |
17 | .imageBox .thumbBox {
18 | position: absolute;
19 | top: 50%;
20 | left: 50%;
21 | width: 200px;
22 | height: 200px;
23 | margin-top: -100px;
24 | margin-left: -100px;
25 | box-sizing: border-box;
26 | border: 1px solid rgb(102, 102, 102);
27 | box-shadow: 0 0 0 1000px rgba(0, 0, 0, 0.5);
28 | }
29 |
30 | .imageBox .spinner {
31 | color: #000;
32 | position: absolute;
33 | top: 0;
34 | left: 0;
35 | bottom: 0;
36 | right: 0;
37 | text-align: center;
38 | line-height: 400px;
39 | user-select: none;
40 | -moz-user-select: none;
41 | -khtml-user-select: none;
42 | -webkit-user-select: none;
43 | -o-user-select: none;
44 | }
--------------------------------------------------------------------------------
/assets/css/fonts.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Montserrat-LightItalic';
3 | src: url('/assets/fonts/montserrat/Montserrat-LightItalic.woff2') format('woff2'),
4 | url('/assets/fonts/montserrat/Montserrat-LightItalic.woff') format('woff');
5 | font-weight: 300;
6 | font-style: italic;
7 | font-display: swap;
8 | }
9 |
10 | @font-face {
11 | font-family: 'Montserrat-ExtraLightItalic';
12 | src: url('/assets/fonts/montserrat/Montserrat-ExtraLightItalic.woff2') format('woff2'),
13 | url('/assets/fonts/montserrat/Montserrat-ExtraLightItalic.woff') format('woff');
14 | font-weight: 200;
15 | font-style: italic;
16 | font-display: swap;
17 | }
18 |
19 | @font-face {
20 | font-family: 'Montserrat-Italic';
21 | src: url('/assets/fonts/montserrat/Montserrat-Italic.woff2') format('woff2'),
22 | url('/assets/fonts/montserrat/Montserrat-Italic.woff') format('woff');
23 | font-weight: normal;
24 | font-style: italic;
25 | font-display: swap;
26 | }
27 |
28 | @font-face {
29 | font-family: 'Montserrat-Light';
30 | src: url('/assets/fonts/montserrat/Montserrat-Light.woff2') format('woff2'),
31 | url('/assets/fonts/montserrat/Montserrat-Light.woff') format('woff');
32 | font-weight: 300;
33 | font-style: normal;
34 | font-display: swap;
35 | }
36 |
37 | @font-face {
38 | font-family: 'Montserrat';
39 | src: url('/assets/fonts/montserrat/Montserrat-Regular.woff2') format('woff2'),
40 | url('/assets/fonts/montserrat/Montserrat-Regular.woff') format('woff');
41 | font-weight: normal;
42 | font-style: normal;
43 | font-display: swap;
44 | }
45 |
46 | @font-face {
47 | font-family: 'Montserrat-SemiBoldItalic';
48 | src: url('/assets/fonts/montserrat/Montserrat-SemiBoldItalic.woff2') format('woff2'),
49 | url('/assets/fonts/montserrat/Montserrat-SemiBoldItalic.woff') format('woff');
50 | font-weight: 600;
51 | font-style: italic;
52 | font-display: swap;
53 | }
54 |
55 | @font-face {
56 | font-family: 'Montserrat-Medium';
57 | src: url('/assets/fonts/montserrat/Montserrat-Medium.woff2') format('woff2'),
58 | url('/assets/fonts/montserrat/Montserrat-Medium.woff') format('woff');
59 | font-weight: 500;
60 | font-style: normal;
61 | font-display: swap;
62 | }
63 |
64 | @font-face {
65 | font-family: 'Montserrat-Thin';
66 | src: url('/assets/fonts/montserrat/Montserrat-Thin.woff2') format('woff2'),
67 | url('/assets/fonts/montserrat/Montserrat-Thin.woff') format('woff');
68 | font-weight: 100;
69 | font-style: normal;
70 | font-display: swap;
71 | }
72 |
73 | @font-face {
74 | font-family: 'Montserrat-SemiBold';
75 | src: url('/assets/fonts/montserrat/Montserrat-SemiBold.woff2') format('woff2'),
76 | url('/assets/fonts/montserrat/Montserrat-SemiBold.woff') format('woff');
77 | font-weight: 600;
78 | font-style: normal;
79 | font-display: swap;
80 | }
81 |
82 | @font-face {
83 | font-family: 'Montserrat-MediumItalic';
84 | src: url('/assets/fonts/montserrat/Montserrat-MediumItalic.woff2') format('woff2'),
85 | url('/assets/fonts/montserrat/Montserrat-MediumItalic.woff') format('woff');
86 | font-weight: 500;
87 | font-style: italic;
88 | font-display: swap;
89 | }
90 |
91 | @font-face {
92 | font-family: 'Montserratt-BlackItalic';
93 | src: url('/assets/fonts/montserrat/Montserrat-BlackItalic.woff2') format('woff2'),
94 | url('/assets/fonts/montserrat/Montserrat-BlackItalic.woff') format('woff');
95 | font-weight: 900;
96 | font-style: italic;
97 | font-display: swap;
98 | }
99 |
100 | @font-face {
101 | font-family: 'Montserrat-ThinItalic';
102 | src: url('/assets/fonts/montserrat/Montserrat-ThinItalic.woff2') format('woff2'),
103 | url('/assets/fonts/montserrat/Montserrat-ThinItalic.woff') format('woff');
104 | font-weight: 100;
105 | font-style: italic;
106 | font-display: swap;
107 | }
108 |
109 | @font-face {
110 | font-family: 'Montserrat-Bold';
111 | src: url('/assets/fonts/montserrat/Montserrat-Bold.woff2') format('woff2'),
112 | url('/assets/fonts/montserrat/Montserrat-Bold.woff') format('woff');
113 | font-weight: bold;
114 | font-style: normal;
115 | font-display: swap;
116 | }
117 |
118 | @font-face {
119 | font-family: 'Montserrat-BoldItalic';
120 | src: url('/assets/fonts/montserrat/Montserrat-BoldItalic.woff2') format('woff2'),
121 | url('/assets/fonts/montserrat/Montserrat-BoldItalic.woff') format('woff');
122 | font-weight: bold;
123 | font-style: italic;
124 | font-display: swap;
125 | }
126 |
127 | @font-face {
128 | font-family: 'Montserrat-Black';
129 | src: url('/assets/fonts/montserrat/Montserrat-Black.woff2') format('woff2'),
130 | url('/assets/fonts/montserrat/Montserrat-Black.woff') format('woff');
131 | font-weight: 900;
132 | font-style: normal;
133 | font-display: swap;
134 | }
135 |
136 | @font-face {
137 | font-family: 'Montserrat-ExtraBoldItalic';
138 | src: url('/assets/fonts/montserrat/Montserrat-ExtraBoldItalic.woff2') format('woff2'),
139 | url('/assets/fonts/montserrat/Montserrat-ExtraBoldItalic.woff') format('woff');
140 | font-weight: bold;
141 | font-style: italic;
142 | font-display: swap;
143 | }
144 |
145 | @font-face {
146 | font-family: 'Montserrat-ExtraLight';
147 | src: url('/assets/fonts/montserrat/Montserrat-ExtraLight.woff2') format('woff2'),
148 | url('/assets/fonts/montserrat/Montserrat-ExtraLight.woff') format('woff');
149 | font-weight: 200;
150 | font-style: normal;
151 | font-display: swap;
152 | }
153 |
154 | @font-face {
155 | font-family: 'Montserrat-ExtraBold';
156 | src: url('/assets/fonts/montserrat/Montserrat-ExtraBold.woff2') format('woff2'),
157 | url('/assets/fonts/montserrat/Montserrat-ExtraBold.woff') format('woff');
158 | font-weight: bold;
159 | font-style: normal;
160 | font-display: swap;
161 | }
--------------------------------------------------------------------------------
/assets/css/frame.css:
--------------------------------------------------------------------------------
1 | @media (prefers-color-scheme:light) {
2 | :root {
3 | --bg-color: #fff;
4 | --text-color: #242425;
5 | }
6 | }
7 |
8 | @media (prefers-color-scheme:dark) {
9 | :root {
10 | --bg-color: #242425;
11 | --text-color: #fff;
12 | }
13 | }
14 |
15 | html,
16 | body {
17 | color: var(--text-color);
18 | position: absolute;
19 | margin: 0px;
20 | width: 100vw;
21 | height: 100vh;
22 | overflow: hidden;
23 | background-color: var(--bg-color);
24 | }
25 |
26 | * {
27 | user-select: none;
28 | }
29 |
30 | .pageContent {
31 | margin: 1%;
32 | display: flex;
33 | flex-direction: row;
34 | width: 99%;
35 | height: 96%;
36 | }
37 |
38 | .mainContainer {
39 | float: left;
40 | width: 99%;
41 | height: 99%;
42 | background-position: fixed;
43 | border-radius: 20px;
44 | background-color: var(--bg-color);
45 | box-shadow: 0px 8px 8px rgba(0, 0, 0, 0.616);
46 | }
47 |
48 | .sideContainer {
49 | margin: 2vw;
50 | width: min-content;
51 | height: min-content;
52 | }
53 |
54 | .recomended {
55 | padding: 20px;
56 | text-align: center;
57 | font-size: 30px;
58 | font-family: montserrat-black;
59 | width: min-content;
60 | margin: auto;
61 | }
62 |
63 | h1 {
64 | text-align: center;
65 | color: var(--text-color);
66 | }
67 |
68 | .mainGame {
69 | margin: 0px;
70 | border-radius: 20px 20px 0px 0px;
71 | width: 100%;
72 | height: 90%;
73 | z-index: 10;
74 | }
75 |
76 | .bottom {
77 | position: absolute;
78 | width: 16em;
79 | bottom: 20px;
80 | }
81 |
82 | .gameThumb {
83 | display: inline-block;
84 | vertical-align: middle;
85 | margin: 10px;
86 | cursor: pointer;
87 | border-radius: 10px;
88 | box-shadow: 0px 8px 8px rgba(0, 0, 0, 0.616);
89 | background-color: var(--bg-color);
90 | user-select: none;
91 | transition: 0.5s;
92 | object-fit: cover;
93 | object-position: center;
94 | width: 200px;
95 | height: 200px;
96 | padding: 10px;
97 | }
98 |
99 | .gameThumb.failed img {
100 | padding: 10px;
101 | background: #fff;
102 | }
103 |
104 | .gameThumb>img {
105 | width: 180px;
106 | height: 180px;
107 | padding: 0px;
108 | user-select: none;
109 | transition: 0.5s;
110 | object-fit: cover;
111 | object-position: center;
112 | border-radius: 5px;
113 | }
114 |
115 | .gameThumb:hover {
116 | background-color: rgb(0, 0, 0, 0.7);
117 | }
118 |
119 | .gameBar {
120 | display: flex;
121 | justify-content: space-between;
122 | flex-direction: row;
123 | height: 10%;
124 | background-color: var(--bg-color);
125 | border-radius: 0px 0px 20px 20px;
126 | padding-left: 20px;
127 | }
128 |
129 | .logo {
130 | height: 70%;
131 | padding: 1%;
132 | cursor: pointer;
133 | margin: auto;
134 | margin-right: 7px
135 | }
136 |
137 | .logo:hover {
138 | animation: shake 0.5s;
139 | animation-iteration-count: 1;
140 | }
141 |
142 | .icon {
143 | float: right;
144 | position: relative;
145 | font-size: 20px;
146 | display: flex;
147 | flex-direction: row;
148 | margin: auto;
149 | margin-left: 20px;
150 | color: var(--text-color);
151 | padding: 20px;
152 | border-radius: 100%;
153 | box-shadow: 0px 8px 8px rgba(0, 0, 0, 0.616);
154 | }
155 |
156 | span.icon>p {
157 | margin: auto;
158 | }
159 |
160 | [data-attr="thumbs-up"]>svg,
161 | [data-attr="thumbs-down"]>svg {
162 | font-size: 30px;
163 | }
164 |
165 | [data-func="open-comments"]>svg {
166 | font-size: 30px;
167 | }
168 |
169 | .left {
170 | display: flex;
171 | flex-direction: row;
172 | }
173 |
174 | .right {
175 | float: right;
176 | margin-right: 50px;
177 | display: flex;
178 | flex-direction: row;
179 | width: min-content;
180 | }
181 |
182 | .gameTitle {
183 | width: 500px;
184 | text-overflow: ellipsis;
185 | white-space: nowrap;
186 | overflow: hidden;
187 | margin: auto;
188 | color: var(--text-color);
189 | font-family: montserrat-black;
190 | font-size: 150%;
191 | }
192 |
193 | .gamebar-item {
194 | float: right;
195 | padding-right: 5px;
196 | display: flex;
197 | flex-direction: row;
198 | width: 50px;
199 | height: 100%;
200 | cursor: pointer;
201 | }
202 |
203 | .commentContainer {
204 | margin: 0.5%;
205 | margin-left: 48em;
206 | position: absolute;
207 | width: 33.3em;
208 | height: 53em;
209 | background: var(--bg-color);
210 | border-radius: 0px 20px 20px 0px;
211 | box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.616);
212 | }
213 |
214 | .commentFrame {
215 | width: 100%;
216 | height: 100%;
217 | border-radius: 0px 20px 20px 0px;
218 | }
219 |
220 | @keyframes shake {
221 | 0% {
222 | transform: translate(1px, 1px) rotate(0deg);
223 | }
224 |
225 | 10% {
226 | transform: translate(-1px, -2px) rotate(-1deg);
227 | }
228 |
229 | 20% {
230 | transform: translate(-3px, 0px) rotate(1deg);
231 | }
232 |
233 | 30% {
234 | transform: translate(3px, 2px) rotate(0deg);
235 | }
236 |
237 | 40% {
238 | transform: translate(1px, -1px) rotate(1deg);
239 | }
240 |
241 | 50% {
242 | transform: translate(-1px, 2px) rotate(-1deg);
243 | }
244 |
245 | 60% {
246 | transform: translate(-3px, 1px) rotate(0deg);
247 | }
248 |
249 | 70% {
250 | transform: translate(3px, 1px) rotate(-1deg);
251 | }
252 |
253 | 80% {
254 | transform: translate(-1px, -1px) rotate(1deg);
255 | }
256 |
257 | 90% {
258 | transform: translate(1px, 2px) rotate(0deg);
259 | }
260 |
261 | 100% {
262 | transform: translate(1px, -2px) rotate(-1deg);
263 | }
264 | }
--------------------------------------------------------------------------------
/assets/css/main.css:
--------------------------------------------------------------------------------
1 | @import url('https://site-assets.fontawesome.com/releases/v6.2.0/css/all.css');
2 | @import url('/assets/css/cropbox.css');
3 | @import url('/assets/css/bulma.css');
4 | @import url('/assets/css/fonts.css');
5 |
6 | @media (prefers-color-scheme:light) {
7 | :root {
8 | --bg-color: #fff;
9 | --text-color: #242425;
10 | }
11 | }
12 |
13 | @media (prefers-color-scheme:dark) {
14 | :root {
15 | --bg-color: #242425;
16 | --text-color: #fff;
17 | }
18 |
19 | .hero.is-link {
20 | filter: brightness(90%);
21 | }
22 |
23 | .navbar.is-link {
24 | filter: brightness(90%);
25 | }
26 | }
27 |
28 | .navbar.is-link>.container {
29 | filter: drop-shadow(0px 0px 20px rgba(0, 0, 0, 0.616));
30 | }
31 |
32 | .navbar.is-link .navTitle {
33 | text-shadow: 0px 0px 20px rgba(0, 0, 0, 0.616);
34 | }
35 |
36 | html {
37 | background: var(--bg-color);
38 | }
39 |
40 | body,
41 | html {
42 | font-family: 'Montserrat';
43 | width: 100vw;
44 | color: var(--text-color);
45 | background-color: var(--bg-color);
46 | user-select: none;
47 | }
48 |
49 | * {
50 | font-family: 'Montserrat';
51 | }
52 |
53 | body h1 {
54 | font-family: 'Montserrat-Black';
55 | }
56 |
57 | .content h1 {
58 | color: var(--text-color);
59 | }
60 |
61 | .content p {
62 | max-width: 50vw;
63 | }
64 |
65 | .notifications {
66 | top: 1%;
67 | width: 20%;
68 | position: fixed;
69 | z-index: 9999;
70 | left: 50%;
71 | transform: translate(-50%, -50%);
72 | transition: .5s;
73 | height: 2%;
74 | min-width: 250px;
75 | max-width: 500px;
76 | }
77 |
78 | .notifications>.notification {
79 | padding: 15px;
80 | border-radius: 20px;
81 | margin-top: 10px;
82 | transition: .5s;
83 | cursor: pointer;
84 | min-width: 250px;
85 | max-width: 500px;
86 | padding-left: 20px;
87 | }
88 |
89 | .notifications>.notification.error {
90 | background: rgba(171, 61, 222, 0.801);
91 | color: #fff;
92 | transition: .5s;
93 | inline-size: 100%;
94 | overflow-wrap: break-word;
95 | }
96 |
97 | a:not(.button) {
98 | color: #ac3cde;
99 | text-decoration: none;
100 | position: relative;
101 | }
102 |
103 | a:not(.button):hover {
104 | color: #ac3cde;
105 | }
106 |
107 | a:not(.button)::before {
108 | background-color: #ac3cde;
109 | bottom: -0.5px;
110 | content: '';
111 | display: block;
112 | height: 1px;
113 | left: 0;
114 | position: absolute;
115 | transform: scaleX(0);
116 | transform-origin: left top;
117 | transition: transform 0.3s ease 0s;
118 | width: 100%;
119 | }
120 |
121 | a:not(.button):hover::before,
122 | a:not(.button):focus::before {
123 | transform: scaleX(1);
124 | }
125 |
126 | .navbar a {
127 | color: #fff;
128 | }
129 |
130 | .navbar a:hover {
131 | color: #fff;
132 | }
133 |
134 | .navbar a::before {
135 | display: none;
136 | }
137 |
138 | .hero.is-link:not(.is-halfheight) {
139 | background-image: url('/assets/img/background.jpeg');
140 | mask-image: url('/assets/img/cutout.svg');
141 | -webkit-mask-image: url('/assets/img/cutout.svg');
142 | mask-size: 100vw;
143 | -webkit-mask-size: 100vw;
144 | mask-repeat: no-repeat;
145 | -webkit-mask-repeat: no-repeat;
146 | min-height: calc(100vw * calc(102 / 300));
147 | margin-bottom: 50px;
148 | }
149 |
150 | .hero.is-link.is-halfheight {
151 | background-image: url('/assets/img/background.jpeg');
152 | mask-image: url('/assets/img/halfheight-cutout.svg');
153 | -webkit-mask-image: url('/assets/img/halfheight-cutout.svg');
154 | mask-size: 100vw;
155 | -webkit-mask-size: 100vw;
156 | mask-repeat: no-repeat;
157 | -webkit-mask-repeat: no-repeat;
158 | min-height: calc(100vw * calc(245 / 900));
159 | margin-bottom: 50px;
160 | }
161 |
162 | body.modalpage {
163 | background-image: url('/assets/img/background.jpeg');
164 | background-position: 0;
165 | text-align: center;
166 | overflow: hidden;
167 | width: 100vw;
168 | background-repeat: no-repeat;
169 | background-size: cover;
170 | height: 100vh;
171 | margin: 0px;
172 | }
173 |
174 | body>div.main.hidden+body::-webkit-scrollbar-track {
175 | display: none;
176 | }
177 |
178 | body>div.main.hidden+body::-webkit-scrollbar {
179 | display: none;
180 | }
181 |
182 | body.modalpage::-webkit-scrollbar {
183 | display: none;
184 | }
185 |
186 | body.modalpage::-webkit-scrollbar-track {
187 | display: none;
188 | }
189 |
190 | .title {
191 | font-family: montserrat-black;
192 | }
193 |
194 | :disabled {
195 | cursor: not-allowed;
196 | }
197 |
198 | html.noscroll {
199 | overflow: hidden;
200 | }
201 |
202 | body.noscroll {
203 | overflow: hidden;
204 | }
205 |
206 | body.noscroll::-webkit-scrollbar {
207 | display: none;
208 | }
209 |
210 | body.noscroll::-webkit-scrollbar-track {
211 | display: none;
212 | }
213 |
214 | ::-webkit-scrollbar {
215 | width: 16px;
216 | }
217 |
218 | ::-webkit-scrollbar-track {
219 | background: rgba(171, 61, 222, 0.2);
220 | }
221 |
222 | ::-webkit-scrollbar-thumb {
223 | background: #ab3dde;
224 | border: 4px solid transparent;
225 | background-clip: content-box;
226 | border-radius: 8px;
227 | }
228 |
229 | ::-webkit-scrollbar-corner {
230 | background: transparent;
231 | }
232 |
233 | .navbar {
234 | background-image: url('/assets/img/background.jpeg');
235 | background-attachment: fixed;
236 | background-position: center;
237 | background-repeat: no-repeat;
238 | background-size: cover;
239 | }
240 |
241 | .navbar-item {
242 | color: #fff;
243 | }
244 |
245 | .navbar a.navbar-item.is-dropdown:hover {
246 | background-color: #ab3dde;
247 | }
248 |
249 | footer {
250 | background-image: url('/assets/img/background.jpeg');
251 | background-attachment: fixed;
252 | background-position: center;
253 | background-repeat: no-repeat;
254 | background-size: cover;
255 | user-select: none;
256 | padding: 4% 5% 4% 5%;
257 | mask-image: url('/assets/img/footer-cutout.svg');
258 | -webkit-mask-image: url('/assets/img/footer-cutout.svg');
259 | mask-size: 100vw;
260 | -webkit-mask-size: 100vw;
261 | mask-repeat: no-repeat;
262 | -webkit-mask-repeat: no-repeat;
263 | color: #fff;
264 | margin-top: 50px;
265 | text-shadow: 0px 0px 20px rgba(0, 0, 0, 0.616);
266 | }
267 |
268 | footer p {
269 | text-shadow: 0px 0px 20px rgba(0, 0, 0, 0.616);
270 | }
271 |
272 | footer h1 {
273 | color: #fff;
274 | }
275 |
276 | footer::before {
277 | display: block;
278 | content: '';
279 | height: 270px;
280 | position: fixed;
281 | bottom: 0;
282 | left: 0;
283 | width: 100vw;
284 | z-index: -1;
285 | background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.8) 100%);
286 | }
287 |
288 | footer .socials i {
289 | margin: 10px;
290 | margin-left: 5px;
291 | margin-right: 5px;
292 | font-size: 20px;
293 | cursor: pointer;
294 | }
295 |
296 | footer .socials a {
297 | color: #fff;
298 | }
299 |
300 | footer .socials a:hover {
301 | color: #fff;
302 | }
303 |
304 | footer .socials a::before {
305 | display: none;
306 | }
307 |
308 | footer .socials i:is(:first-child) {
309 | margin-left: 0px;
310 | }
311 |
312 | footer a {
313 | font-family: 'Montserrat-Bold';
314 | }
315 |
316 | footer .right {
317 | text-align: right;
318 | }
319 |
320 | footer .title:not(:last-child) {
321 | display: flex;
322 | margin: 0px;
323 | }
324 |
325 | footer .title img {
326 | width: 40px;
327 | height: 40px;
328 | margin-left: 10px;
329 | filter: drop-shadow(0px 0px 20px rgba(0, 0, 0, 0.616));
330 | }
331 |
332 | span.Icon>svg {
333 | margin: auto;
334 | font-size: 20px;
335 | }
336 |
337 | span.Icon {
338 | margin: auto;
339 | }
340 |
341 | .avatarContainer {
342 | display: flex;
343 | }
344 |
345 | .userid {
346 | top: 35%;
347 | left: 62%;
348 | position: absolute;
349 | }
350 |
351 | button.button.is-rounded.is-link.has-right-sharp {
352 | border-bottom-left-radius: 0px;
353 | border-top-left-radius: 0px;
354 | }
355 |
356 | div.select.is-link.is-rounded.sortSelect>select {
357 | border-bottom-left-radius: 0px;
358 | border-top-left-radius: 0px;
359 | border-left: none;
360 | box-shadow: none;
361 | }
362 |
363 | input.is-link.is-rounded.searchBar {
364 | border-bottom-right-radius: 0px;
365 | border-top-right-radius: 0px;
366 | border-right-color: transparent;
367 | text-align: left;
368 | padding-left: 40px;
369 | }
370 |
371 | input.is-link.is-rounded.searchBar {
372 | box-shadow: none;
373 | }
374 |
375 | input.is-link.is-rounded.searchBar {
376 | box-shadow: none;
377 | }
378 |
379 | .usernameForm {
380 | padding: 20px;
381 | display: flex;
382 | width: 400px;
383 | }
384 |
385 | input.input.is-link.is-rounded[data-attr='username'] {
386 | border-bottom-right-radius: 0px;
387 | border-top-right-radius: 0px;
388 | }
389 |
390 | .author {
391 | white-space: nowrap;
392 | overflow: hidden;
393 | text-overflow: ellipsis;
394 | width: 20px;
395 | }
396 |
397 | .comment-subject {
398 | word-wrap: break-word;
399 | }
400 |
401 | .comment {
402 | width: 300px;
403 | padding: 10px;
404 | margin-top: 20px;
405 | margin-bottom: 20px;
406 | overflow: hidden;
407 | }
408 |
409 | .closeModalPannel {
410 | margin: 5px;
411 | position: fixed;
412 | cursor: pointer;
413 | left: 80%;
414 | }
415 |
416 | .closeModalPannel>i {
417 | font-size: 30px;
418 | color: #000;
419 | }
420 |
421 | [data-attr='comment-subject'] {
422 | resize: none;
423 | }
424 |
425 | .post-comment {
426 | padding: 10px;
427 | bottom: 0px;
428 | position: sticky;
429 | background: #fff;
430 | }
431 |
432 | .is-right {
433 | float: right;
434 | }
435 |
436 | .comments {
437 | padding: 2px;
438 | margin: 20px;
439 | overflow: hidden;
440 | }
441 |
442 | .card {
443 | margin: auto;
444 | background-color: var(--bg-color);
445 | border-radius: 10px;
446 | box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.616);
447 | }
448 |
449 | .username-container>i {
450 | font-size: 20px;
451 | padding: 3px;
452 | cursor: pointer;
453 | }
454 |
455 | .profile#app {
456 | position: absolute;
457 | top: 50%;
458 | left: 50%;
459 | transform: translate(-50%, -50%);
460 | margin: auto;
461 | }
462 |
463 | .new-avatar {
464 | width: 200px;
465 | height: 200px;
466 | background-position: center;
467 | background-repeat: no-repeat;
468 | background-size: cover;
469 | outline: 2px solid #fff;
470 | border-radius: 10px;
471 | }
472 |
473 | .navbar-item.has-dropdown {
474 | padding-right: 10px;
475 | }
476 |
477 | .select select {
478 | background: transparent;
479 | color: var(--text-color);
480 | }
481 |
482 | .control i {
483 | color: var(--text-color);
484 | }
485 |
486 | .input {
487 | background: transparent;
488 | color: var(--text-color);
489 | }
490 |
491 | .input::placeholder {
492 | color: var(--text-color);
493 | }
494 |
495 | .avatar-small {
496 | margin: auto;
497 | border-radius: 10px;
498 | background-color: #fff;
499 | width: 40px;
500 | height: 40px;
501 | outline: 2px solid #fff;
502 | background-position: center;
503 | background-repeat: no-repeat;
504 | background-size: cover;
505 | box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.616);
506 | background-image: url('/assets/img/logo.png');
507 | }
508 |
509 | .database_nav {
510 | width: 100vw;
511 | top: 50px;
512 | background: var(--bg-color);
513 | z-index: 4;
514 | padding: 20px;
515 | display: flex;
516 | flex-direction: row;
517 | margin: auto;
518 | transition: .3s;
519 | position: sticky;
520 | position: -webkit-sticky;
521 | }
522 |
523 | .database_nav.shadowed {
524 | box-shadow: 0px 5px 8px rgba(0, 0, 0, 0.616);
525 | }
526 |
527 | .searchErr {
528 | margin-top: 85px;
529 | margin-bottom: 85px;
530 | text-align: center;
531 | }
532 |
533 | .searchErr h1 {
534 | font-size: 40px;
535 | }
536 |
537 | .sort {
538 | display: inline-block;
539 | margin: auto;
540 | margin-left: 0px;
541 | }
542 |
543 | .search {
544 | text-align: center;
545 | width: 500px;
546 | display: inline-block;
547 | margin: auto;
548 | margin-right: 0px;
549 | }
550 |
551 | .search input {
552 | width: 500px;
553 | text-align: center;
554 | }
555 |
556 | .search i {
557 | position: absolute;
558 | z-index: 1;
559 | padding: 12px;
560 | }
561 |
562 | .content:not(:last-child) {
563 | min-height: 32vh;
564 | margin: 100px;
565 | margin-top: 0px;
566 | margin-bottom: 0px;
567 | user-select: text;
568 | width: 100%;
569 | }
570 |
571 | .heroIcon {
572 | margin: auto;
573 | width: 40px;
574 | height: 40px;
575 | }
576 |
577 | .heroTitle {
578 | font-family: montserrat-black;
579 | font-size: 100px;
580 | text-shadow: 0px 0px 20px rgba(0, 0, 0, 0.616);
581 | }
582 |
583 | .navTitle {
584 | margin: auto;
585 | margin-left: 10px;
586 | cursor: pointer;
587 | }
588 |
589 | .err {
590 | color: red;
591 | margin: 15px;
592 | }
593 |
594 | .box {
595 | color: #000;
596 | position: absolute;
597 | top: 50%;
598 | left: 50%;
599 | transform: translate(-50%, -50%);
600 | width: 400px;
601 | box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.616)
602 | }
603 |
604 | .innerGame {
605 | width: 100%;
606 | height: 100%;
607 | background: var(--bg-color);
608 | }
609 |
610 | .games {
611 | display: flex;
612 | justify-content: center;
613 | align-items: center;
614 | flex-wrap: wrap;
615 | }
616 |
617 | .game {
618 | display: inline-block;
619 | vertical-align: middle;
620 | margin: 10px;
621 | position: relative;
622 | border-radius: 10px;
623 | box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.616);
624 | background-color: var(--bg-color);
625 | user-select: none;
626 | transition: 0.5s;
627 | object-fit: cover;
628 | object-position: center;
629 | width: 200px;
630 | height: 200px;
631 | cursor: pointer;
632 | padding: 10px;
633 | }
634 |
635 | .game.failed img {
636 | padding: 10px;
637 | background: #fff;
638 | }
639 |
640 | .game>img {
641 | width: 180px;
642 | height: 180px;
643 | padding: 0px;
644 | user-select: none;
645 | transition: 0.5s;
646 | object-fit: cover;
647 | object-position: center;
648 | border-radius: 5px;
649 | }
650 |
651 | .game>p {
652 | transition: 0.5s;
653 | text-align: center;
654 | border-radius: 0px 0px 10px 10px;
655 | padding: 10px;
656 | bottom: 0px;
657 | right: 0px;
658 | position: absolute;
659 | width: 100%;
660 | background-color: rgb(0, 0, 0, 0.7);
661 | color: white;
662 | text-overflow: ellipsis;
663 | }
664 |
665 | .game:hover {
666 | background-color: rgb(0, 0, 0, 0.5);
667 | }
668 |
669 | .gameFrame {
670 | background-color: var(--bg-color);
671 | width: 100%;
672 | height: 100vh;
673 | }
674 |
675 | .hidden {
676 | transition: 0.5s;
677 | display: none;
678 | }
679 |
680 | .avatar {
681 | margin: auto;
682 | transition: 0.5s;
683 | border-radius: 15px;
684 | width: 80px;
685 | height: 80px;
686 | background-position: center;
687 | background-repeat: no-repeat;
688 | background-size: cover;
689 | }
690 |
691 | .username {
692 | text-align: center;
693 | font-size: 30px;
694 | cursor: pointer;
695 | }
696 |
697 | .uploadIcon {
698 | transition: 0.5s;
699 | position: absolute;
700 | background-color: rgb(0, 0, 0, 0.5);
701 | color: #fff;
702 | font-size: 20px;
703 | border-radius: 15px;
704 | padding: 30px;
705 | padding-bottom: 20px;
706 | }
707 |
708 | .hero {
709 | background-attachment: fixed;
710 | background-position: center;
711 | background-repeat: no-repeat;
712 | background-size: cover;
713 | }
714 |
715 | .frame_500x500 {
716 | width: 500px;
717 | height: 500px;
718 | display: flex;
719 | justify-content: center;
720 | align-items: center;
721 | user-select: none;
722 | margin: auto;
723 | }
724 |
725 | .modalstyle_error {
726 | position: absolute;
727 | top: 50%;
728 | left: 50%;
729 | transform: translate(-50%, -50%);
730 | }
731 |
732 | .is-center {
733 | text-align: center;
734 | }
735 |
736 | .loading {
737 | background-color: #ededed;
738 | background: linear-gradient(100deg,
739 | rgba(255, 255, 255, 0) 40%,
740 | rgba(255, 255, 255, .5) 50%,
741 | rgba(255, 255, 255, 0) 60%) #ededed;
742 | background-size: 200% 100%;
743 | background-position-x: 180%;
744 | animation: 1s loading-in-out infinite;
745 | }
746 |
747 | .loading img,
748 | .loading h4,
749 | .loading .description {
750 | background-color: #ededed;
751 | background: linear-gradient(100deg,
752 | rgba(255, 255, 255, 0) 40%,
753 | rgba(255, 255, 255, .5) 50%,
754 | rgba(255, 255, 255, 0) 60%) #ededed;
755 | background-size: 200% 100%;
756 | background-position-x: 180%;
757 | animation: 1s loading-in-out infinite;
758 | }
759 |
760 | @keyframes loading {
761 | to {
762 | background-position-x: -20%;
763 | }
764 | }
765 |
766 | #loader {
767 | background: var(--bg-color);
768 | position: absolute;
769 | top: 50%;
770 | left: 50%;
771 | transform: translate(-50%, -50%);
772 | width: 80px;
773 | height: 80px;
774 | border-radius: 6px;
775 | }
776 |
777 | #loader div {
778 | display: inline-block;
779 | position: absolute;
780 | left: 8px;
781 | width: 16px;
782 | background: var(--text-color);
783 | border-radius: 3px;
784 | animation: loader 1.2s cubic-bezier(0, 0.5, 0.5, 1) infinite;
785 | }
786 |
787 | #loader div:nth-child(1) {
788 | left: 8px;
789 | animation-delay: -0.24s;
790 | }
791 |
792 | #loader div:nth-child(2) {
793 | left: 32px;
794 | animation-delay: -0.12s;
795 | }
796 |
797 | #loader div:nth-child(3) {
798 | left: 56px;
799 | animation-delay: 0;
800 | }
801 |
802 | @keyframes loader {
803 | 0% {
804 | top: 8px;
805 | height: 64px;
806 | }
807 |
808 | 50%,
809 | 100% {
810 | top: 24px;
811 | height: 32px;
812 | }
813 | }
814 |
815 | .lds-spinner {
816 | margin: auto;
817 | color: official;
818 | position: relative;
819 | width: 80px;
820 | height: 80px;
821 | }
822 |
823 | .lds-spinner div {
824 | transform-origin: 40px 40px;
825 | animation: lds-spinner 1.2s linear infinite;
826 | }
827 |
828 | .lds-spinner div:after {
829 | content: ' ';
830 | display: block;
831 | position: absolute;
832 | top: 3px;
833 | left: 37px;
834 | width: 6px;
835 | height: 18px;
836 | border-radius: 20%;
837 | background: #000;
838 | }
839 |
840 | .lds-spinner div:nth-child(1) {
841 | transform: rotate(0deg);
842 | animation-delay: -1.1s;
843 | }
844 |
845 | .lds-spinner div:nth-child(2) {
846 | transform: rotate(30deg);
847 | animation-delay: -1s;
848 | }
849 |
850 | .lds-spinner div:nth-child(3) {
851 | transform: rotate(60deg);
852 | animation-delay: -0.9s;
853 | }
854 |
855 | .lds-spinner div:nth-child(4) {
856 | transform: rotate(90deg);
857 | animation-delay: -0.8s;
858 | }
859 |
860 | .lds-spinner div:nth-child(5) {
861 | transform: rotate(120deg);
862 | animation-delay: -0.7s;
863 | }
864 |
865 | .lds-spinner div:nth-child(6) {
866 | transform: rotate(150deg);
867 | animation-delay: -0.6s;
868 | }
869 |
870 | .lds-spinner div:nth-child(7) {
871 | transform: rotate(180deg);
872 | animation-delay: -0.5s;
873 | }
874 |
875 | .lds-spinner div:nth-child(8) {
876 | transform: rotate(210deg);
877 | animation-delay: -0.4s;
878 | }
879 |
880 | .lds-spinner div:nth-child(9) {
881 | transform: rotate(240deg);
882 | animation-delay: -0.3s;
883 | }
884 |
885 | .lds-spinner div:nth-child(10) {
886 | transform: rotate(270deg);
887 | animation-delay: -0.2s;
888 | }
889 |
890 | .lds-spinner div:nth-child(11) {
891 | transform: rotate(300deg);
892 | animation-delay: -0.1s;
893 | }
894 |
895 | .lds-spinner div:nth-child(12) {
896 | transform: rotate(330deg);
897 | animation-delay: 0s;
898 | }
899 |
900 | @keyframes lds-spinner {
901 | 0% {
902 | opacity: 1;
903 | }
904 |
905 | 100% {
906 | opacity: 0;
907 | }
908 | }
--------------------------------------------------------------------------------
/assets/error/403.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Error 403 | GameHub
12 |
13 |
14 |
15 |
16 |
Error 403
17 |
The page you tried to access is forbiden.
Home
18 |
19 |
20 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/assets/error/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Error 404 | GameHub
15 |
16 |
17 |
18 |
19 |
20 |
Error 404
21 |
The page you tried to access could not be found. Home
22 |
23 |
24 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/assets/error/503.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Maintenance Error | GameHub
12 |
13 |
14 |
15 |
16 |
Error 503
17 |
The page you tried to access is under maintenance. It should be up and running soon. Thanks!
18 |
19 |
20 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/assets/error/failed.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Error | GameHub
12 |
13 |
14 |
15 |
16 |
17 |
Operation Failed
18 |
Please try again later
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/assets/error/proxy_detection.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Proxy Detected | GameHub
12 |
13 |
14 |
15 |
16 |
20 |
21 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/assets/error/unknown.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Error | GameHub
12 |
13 |
14 |
15 |
16 |
17 |
Unknown
18 |
An unknown error occoured. Please try again later.
Home
19 |
20 |
21 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Black.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Black.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Black.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Black.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-BlackItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-BlackItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-BlackItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-BlackItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Bold.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Bold.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-BoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-BoldItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-BoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-BoldItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraBold.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraBold.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraBoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraBoldItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraBoldItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraLight.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraLight.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraLight.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraLightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraLightItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ExtraLightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ExtraLightItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Italic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Italic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Italic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Light.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Light.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Light.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-LightItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-LightItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-LightItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-LightItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Medium.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Medium.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-MediumItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-MediumItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-MediumItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-MediumItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Regular.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Regular.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-SemiBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-SemiBold.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-SemiBold.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-SemiBoldItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-SemiBoldItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-SemiBoldItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-SemiBoldItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Thin.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Thin.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-Thin.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ThinItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ThinItalic.woff
--------------------------------------------------------------------------------
/assets/fonts/montserrat/Montserrat-ThinItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/fonts/montserrat/Montserrat-ThinItalic.woff2
--------------------------------------------------------------------------------
/assets/fonts/montserrat/stylesheet.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'Montserrat';
3 | src: url('Montserrat-LightItalic.woff2') format('woff2'),
4 | url('Montserrat-LightItalic.woff') format('woff');
5 | font-weight: 300;
6 | font-style: italic;
7 | font-display: swap;
8 | }
9 |
10 | @font-face {
11 | font-family: 'Montserrat';
12 | src: url('Montserrat-ExtraLightItalic.woff2') format('woff2'),
13 | url('Montserrat-ExtraLightItalic.woff') format('woff');
14 | font-weight: 200;
15 | font-style: italic;
16 | font-display: swap;
17 | }
18 |
19 | @font-face {
20 | font-family: 'Montserrat';
21 | src: url('Montserrat-Italic.woff2') format('woff2'),
22 | url('Montserrat-Italic.woff') format('woff');
23 | font-weight: normal;
24 | font-style: italic;
25 | font-display: swap;
26 | }
27 |
28 | @font-face {
29 | font-family: 'Montserrat';
30 | src: url('Montserrat-Light.woff2') format('woff2'),
31 | url('Montserrat-Light.woff') format('woff');
32 | font-weight: 300;
33 | font-style: normal;
34 | font-display: swap;
35 | }
36 |
37 | @font-face {
38 | font-family: 'Montserrat';
39 | src: url('Montserrat-Regular.woff2') format('woff2'),
40 | url('Montserrat-Regular.woff') format('woff');
41 | font-weight: normal;
42 | font-style: normal;
43 | font-display: swap;
44 | }
45 |
46 | @font-face {
47 | font-family: 'Montserrat';
48 | src: url('Montserrat-SemiBoldItalic.woff2') format('woff2'),
49 | url('Montserrat-SemiBoldItalic.woff') format('woff');
50 | font-weight: 600;
51 | font-style: italic;
52 | font-display: swap;
53 | }
54 |
55 | @font-face {
56 | font-family: 'Montserrat';
57 | src: url('Montserrat-Medium.woff2') format('woff2'),
58 | url('Montserrat-Medium.woff') format('woff');
59 | font-weight: 500;
60 | font-style: normal;
61 | font-display: swap;
62 | }
63 |
64 | @font-face {
65 | font-family: 'Montserrat';
66 | src: url('Montserrat-Thin.woff2') format('woff2'),
67 | url('Montserrat-Thin.woff') format('woff');
68 | font-weight: 100;
69 | font-style: normal;
70 | font-display: swap;
71 | }
72 |
73 | @font-face {
74 | font-family: 'Montserrat';
75 | src: url('Montserrat-SemiBold.woff2') format('woff2'),
76 | url('Montserrat-SemiBold.woff') format('woff');
77 | font-weight: 600;
78 | font-style: normal;
79 | font-display: swap;
80 | }
81 |
82 | @font-face {
83 | font-family: 'Montserrat';
84 | src: url('Montserrat-MediumItalic.woff2') format('woff2'),
85 | url('Montserrat-MediumItalic.woff') format('woff');
86 | font-weight: 500;
87 | font-style: italic;
88 | font-display: swap;
89 | }
90 |
91 | @font-face {
92 | font-family: 'Montserrat';
93 | src: url('Montserrat-BlackItalic.woff2') format('woff2'),
94 | url('Montserrat-BlackItalic.woff') format('woff');
95 | font-weight: 900;
96 | font-style: italic;
97 | font-display: swap;
98 | }
99 |
100 | @font-face {
101 | font-family: 'Montserrat';
102 | src: url('Montserrat-ThinItalic.woff2') format('woff2'),
103 | url('Montserrat-ThinItalic.woff') format('woff');
104 | font-weight: 100;
105 | font-style: italic;
106 | font-display: swap;
107 | }
108 |
109 | @font-face {
110 | font-family: 'Montserrat';
111 | src: url('Montserrat-Bold.woff2') format('woff2'),
112 | url('Montserrat-Bold.woff') format('woff');
113 | font-weight: bold;
114 | font-style: normal;
115 | font-display: swap;
116 | }
117 |
118 | @font-face {
119 | font-family: 'Montserrat';
120 | src: url('Montserrat-BoldItalic.woff2') format('woff2'),
121 | url('Montserrat-BoldItalic.woff') format('woff');
122 | font-weight: bold;
123 | font-style: italic;
124 | font-display: swap;
125 | }
126 |
127 | @font-face {
128 | font-family: 'Montserrat';
129 | src: url('Montserrat-Black.woff2') format('woff2'),
130 | url('Montserrat-Black.woff') format('woff');
131 | font-weight: 900;
132 | font-style: normal;
133 | font-display: swap;
134 | }
135 |
136 | @font-face {
137 | font-family: 'Montserrat';
138 | src: url('Montserrat-ExtraBoldItalic.woff2') format('woff2'),
139 | url('Montserrat-ExtraBoldItalic.woff') format('woff');
140 | font-weight: bold;
141 | font-style: italic;
142 | font-display: swap;
143 | }
144 |
145 | @font-face {
146 | font-family: 'Montserrat';
147 | src: url('Montserrat-ExtraLight.woff2') format('woff2'),
148 | url('Montserrat-ExtraLight.woff') format('woff');
149 | font-weight: 200;
150 | font-style: normal;
151 | font-display: swap;
152 | }
153 |
154 | @font-face {
155 | font-family: 'Montserrat';
156 | src: url('Montserrat-ExtraBold.woff2') format('woff2'),
157 | url('Montserrat-ExtraBold.woff') format('woff');
158 | font-weight: bold;
159 | font-style: normal;
160 | font-display: swap;
161 | }
162 |
163 |
--------------------------------------------------------------------------------
/assets/img/background.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/img/background.jpeg
--------------------------------------------------------------------------------
/assets/img/cutout.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/img/footer-cutout.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/img/halfheight-cutout.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/embr-dev/GameHub/ae3b8eace8fbbef234d4d3dcc99898c11d97f0bb/assets/img/logo.png
--------------------------------------------------------------------------------
/assets/js/analytics.js:
--------------------------------------------------------------------------------
1 | import API from './api.js';
2 |
3 | export default () => {
4 | if (localStorage.getItem('analytics_website_id') !== 'not tracked') {
5 | if (localStorage.getItem('analytics_website_id')) {
6 | const analyticsScript = document.createElement('script');
7 | analyticsScript.setAttribute('data-website-id', localStorage.getItem('analytics_website_id'));
8 | analyticsScript.setAttribute('async', '');
9 | analyticsScript.src = 'https://analytics.embernet.work/script.js';
10 | document.head.insertBefore(analyticsScript, document.head.firstChild);
11 |
12 | analyticsScript.onload = () => window.analytics = window.umami;
13 | } else API.get(`/analytics/${window.location.hostname}`)
14 | .then(res => {
15 | if (typeof res === 'string') {
16 | localStorage.setItem('analytics_website_id', res);
17 | location.reload();
18 | } else {
19 | localStorage.setItem('analytics_website_id', 'not tracked');
20 | location.reload();
21 | }
22 | })
23 | .catch(e => {
24 | localStorage.setItem('analytics_website_id', 'not tracked');
25 | location.reload();
26 | });
27 | } else window.analytics = {
28 | track: (...args) => {},
29 | identify: (...args) => {}
30 | };
31 | };
--------------------------------------------------------------------------------
/assets/js/api.js:
--------------------------------------------------------------------------------
1 | import cookie from '/assets/js/cookie.js';
2 |
3 | class api_ {
4 | constructor() {
5 | try {
6 | this.servers = JSON.parse(localStorage.getItem('servers'));
7 | } catch (e) {
8 | console.error('Could not get serverlist');
9 | }
10 | }
11 |
12 | /**
13 | *
14 | * @returns {Promise.}
15 | */
16 | validSession = () => {
17 | return new Promise((resolve, reject) => {
18 | this.get('/me')
19 | .then((res) => {
20 | if (res.status !== 404) resolve(true);
21 | else resolve(false);
22 | })
23 | .catch(() => resolve(false));
24 | });
25 | };
26 |
27 | /**
28 | *
29 | * @returns {boolean}
30 | */
31 | connected = () => {
32 | try {
33 | return Boolean(this.servers[0]);
34 | } catch (e) {
35 | return false;
36 | }
37 | };
38 |
39 | /**
40 | *
41 | * @param {string} route
42 | * @returns {Promise.