The official website for the open-source compatibility layer fpPS4
1@import url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500&display=swap');
2
3/*+ scrollbar */
4::-webkit-scrollbar {
5 width: 0.57rem;}
6
7::-webkit-scrollbar-thumb {
8 background: var(--hover);
9 border-radius: 0.13rem;}
10
11::-webkit-scrollbar-thumb:hover {
12 background: var(--selected); }
13/*- scrollbar */
14
15:root {
16 --text: #eceff4;
17 --whiteText: #eceff4;
18 --border: #e1e1e10d;
19 --solidBorder: #393b3e;
20 --background: #101112;
21 --main0: #26272a;
22 --main1: #2f3134;
23 --hover: #393b3e;
24 --selected: #4b4d52;
25}
26
27.lightMode {
28 --text: #2E3440;
29 --border: #b2b8c770;
30 --solidBorder: #b2b8c7;
31 --background: #919ca9;
32 --main0: #E5E9F0;
33 --main1: #D8DEE9;
34 --hover: #c6ccd9;
35 --selected: #b0b7c7;
36}
37.lightMode .lightmodeText{color: #eceff4}
38/* .lightmode ::selection{background-color: #3864d4}
39::selection {
40 background-color: yellow;
41} */
42
43.Nothing, .N\/A {--status-color: #1F2325;}
44.Boots {--status-color: #F2766E;}
45.Menus {--status-color: #4288B7;}
46.Ingame {--status-color: #fabb44;}
47.Playable {--status-color: #54A396;}
48
49.skeletonAnimation {
50 background-image: linear-gradient(90deg, var(--solidBorder), var(--main1), var(--solidBorder)) !important;
51 background-size: 200% 100% !important;
52 animation: skeletonLoading 2s ease-in-out infinite;
53}
54@keyframes skeletonLoading {
55 0% {background-position: -100% 0;}
56 100% {background-position: 100% 0;}
57}
58
59* {
60 margin: 0;
61 padding: 0;
62 font-family: 'Rubik', sans-serif;
63 scrollbar-color: var(--main1) #ffffff00; /* - FF scrollbar */
64 color: var(--text);
65 text-decoration: none;
66 font-weight: 400;
67 -webkit-tap-highlight-color: transparent;
68}
69
70html {
71 font-size: 16px;
72}
73
74body{
75 background: var(--background);
76 flex-direction: column;
77 align-items: center;
78 overflow-y: scroll;
79 overflow-x: hidden;
80 display: flex;
81}
82
83.main {
84 display: flex;
85 flex-direction: column;
86 position: relative;
87 align-items: center;
88 box-shadow: 0 0.3rem 0.7rem 0 rgba(0, 0, 0, 0.5);
89 background: var(--main0);
90 border-radius: 6px;
91 margin-top: 6rem;
92 padding: 2rem 0 1rem;
93 width: 40rem;
94 border: 0.2rem solid var(--main0);
95}
96
97.mainText {font-weight: 500;}
98
99.smolMainText {
100 width: 37.5rem;
101 padding: 4% 2% 3%;
102 text-align: center;
103 font-size: 1.1rem;
104}
105
106/*+ PROGRESS BAR*/
107.progressContainer {width: 28rem;}
108
109.progressRow {
110 display: flex;
111 gap: 1rem;
112}
113
114.progressWrap {border: 0.05rem solid var(--border);}
115.progressWrap, .progressWrapb {
116 background: var(--main1);
117 position: relative;
118 overflow: hidden;
119 margin: 1.1% 0;
120 border-radius: 0.5rem;
121 box-sizing: border-box;
122 height: 2rem;
123 width: 100%;
124 display: flex;
125 align-items: center;
126 transition: background 0.1s ease-in-out;
127 cursor: pointer;
128 user-select: none;
129}
130.progressWrap:hover, .progressWrapb:hover {background: var(--hover);}
131
132.progressWrapb::after { /*fix black progressbar*/
133 content: '';
134 position: absolute;
135 width: 100%;
136 height: 100%;
137 box-sizing: border-box;
138 border: 0.05rem solid var(--border);
139 border-radius: 0.5rem;
140 z-index: 4;
141}
142
143.progressBar {
144 position: absolute;
145 height: 100%;
146 width: 0%;
147 border-radius: 0.3rem;
148 transition: width 0.5s ease-in-out;
149}
150
151.progressBarText {
152 position: absolute;
153 font-weight: 500;
154 left: 1rem;
155 z-index: 3;
156}
157
158.progressBarInfo {
159 position: absolute;
160 z-index: 4;
161 right: 0.5rem;
162 font-size: 0.9rem;
163 transition: opacity 0.15s ease-in-out;
164}
165.selected .progressBarInfo{opacity: 1;}
166.selected, .selected:hover {background: var(--selected) !important;}
167/*- PROGRESS BAR*/
168
169
170.searchBarContainer {display: flex;}
171.searchBar {
172 padding-left: 1rem;
173 width: 18.4rem;
174 height: 2.15rem;
175 margin: 1.9rem 0 0.3rem;
176 background: var(--main1);
177 border: 0.05rem solid var(--border);
178 border-radius: 0.6rem;
179 line-height: 0;
180 font-size: 0.9rem;
181}
182
183
184input[type="number"] {
185 -moz-appearance: textfield;
186 appearance: textfield;
187}
188
189input[type="number"]::-webkit-inner-spin-button,
190input[type="number"]::-webkit-outer-spin-button {
191 -webkit-appearance: none;
192}
193
194.searchBar:focus,
195.pageSelector:focus {
196 outline: none;
197 background: var(--hover);
198 transition: background 0.1s ease-in-out;
199 border-color: var(--hover);
200}
201.searchBar::placeholder {color: #8C8C8C; font-weight: 500;}
202.pageSelector::placeholder {color: var(--text);}
203.searchBar:hover, .pageSelector:hover {
204 background-color: var(--hover);
205 border-color: var(--hover);
206}
207
208.optionButtons {
209 display: flex;
210 justify-content: space-between;
211 padding: 0.25rem 0;
212 width: 100%;
213}
214
215.optionButton {
216 cursor: pointer;
217 width: 6rem;
218 user-select: none;
219 height: 1.3rem;
220 background: var(--main1);
221 padding: 0.3rem 0;
222 text-align: center;
223 border-radius: 0.4rem;
224 border: 0.05rem solid var(--border);
225 font-weight: 500;
226}
227.optionButton:hover {background: var(--hover);}
228
229.noResultsText {
230 text-align: center;
231 padding: 2rem 0 0rem;
232 font-weight: 500;
233}
234
235.noResultsEmoji {
236 text-align: center;
237 font-size: 2.5rem;
238 padding: 2rem 0 3rem;
239}
240
241/*+ GAME CARDS*/
242.gameWrapper {width: 95%;}
243
244.gameContainer {
245 position: relative;
246 display: flex;
247 width: 100%;
248 height: 5.3rem;
249 margin: 1rem 0;
250 text-decoration: none;
251 background: var(--main1);
252 border-radius: 0.5rem;
253 transition: background-color 0.1s ease-in-out;
254 cursor: default;
255}
256
257.gameContainer::before {
258 content: '';
259 position: absolute;
260 top: 0;
261 left: 0;
262 width: 100%;
263 height: 100%;
264 box-sizing: border-box;
265 border: 0.05rem solid var(--solidBorder);
266 border-radius: 0.5rem;
267 pointer-events: none;
268 z-index: 2;
269}
270.gameContainer:hover {background: var(--hover);}
271
272.gameImageLink {
273 border-radius: 0.6rem 0.4rem 0.4rem 0.6rem;
274 overflow: hidden;
275}
276.gameImageText,
277.gameImage {
278 width: 5.3rem;
279 height: 5.3rem;
280 max-width: 5.3rem;
281 border-radius: 0.5rem 0.4rem 0.4rem 0.5rem;
282 transition: transform 0.2s ease-in-out;
283 image-rendering: high-quality;
284}
285
286.gameImageText {
287 background: #1F2325;
288 font-weight: 500;
289 /* display: flex; */
290 align-content: center;
291 text-align: center;
292 flex-wrap: wrap;
293 justify-content: center;
294 color: white;
295 user-select: none;
296}
297
298.gameSeparator {
299 height: 3.9rem;
300 margin: 0.7rem 1.25rem;
301 border-right: 0.375rem solid var(--status-color);
302 border-radius: 0.25rem;
303}
304
305.gameDetails {
306 flex: 1;
307 display: flex;
308 flex-direction: column;
309 justify-content: center;
310}
311
312.gameName {
313 font-weight: 500;
314 font-size: 1.125rem;
315 overflow: hidden;
316 white-space: nowrap;
317 text-overflow: ellipsis;
318 transition: width 0.4s ease-out;
319 width: 22rem;
320}
321.gameName:hover {width: 29.3rem;}
322
323.gameCusa {
324 position: absolute;
325 right: 0.94rem;
326 padding: 0.25rem 0.38rem;
327 font-weight: 500;
328 font-size: 0.87rem;
329}
330
331.gameStatus {
332 width: 5.7rem;
333 height: 1.5rem;
334 margin-top: 0.94rem;
335 background-color: var(--status-color);
336 border-radius: 0.25rem;
337 user-select: none;
338 color: var(--whiteText);
339 font-weight: 500;
340 display: flex;
341 align-items: center;
342 text-align: center;
343 justify-content: center;
344}
345/*- GAME CARDS*/
346
347.totalTimeText {
348 text-align: center;
349 font-size: 1rem;
350 padding: 0 0 0.7rem;
351}
352
353.pageBarContainer {
354 display: flex;
355 padding: 0.8rem 0 2rem;
356 gap: 0.35rem;
357 text-align: center;
358 height: 2rem;
359 align-items: center;
360 user-select: none;
361}
362
363.pageBarImage {
364 height: 1.5rem;
365 width: 1.5rem;
366 padding: 0.38rem;
367 border-radius: 0.5rem;
368 user-select: none;
369 filter: invert(1);
370 cursor: pointer;
371}
372
373.pageBarButton,
374.pageBarSearch {
375 height: 2rem;
376 width: 2rem;
377 border-radius: 0.5rem;
378 /* padding: 0.13rem; */
379 padding: 0.1rem;
380 font-size: 0.95rem;
381}
382
383.pageBarButton {
384 display: flex;
385 align-items: center;
386 justify-content: center;
387 cursor: pointer;
388}
389
390.pageBarSearch {
391 background: transparent;
392 border: transparent;
393 text-align: center;
394}
395.pageBarSearch:focus {outline: none; background: var(--hover); transition: background 0.1s ease-in-out;}
396.pageBarSearch:hover, .pageBarButton:hover {background-color: var(--hover);}
397.pageBarImage:hover{background-color: #00000014;}
398.pageBarSearch::placeholder {color: var(--text);}
399
400.lightMode .pageBarImage {filter: invert(0);}
401
402@media screen and (max-width: 700px) {
403 .main {
404 width: 34rem;
405 border-radius: 0.8rem;
406 }
407 .gameName {
408 width: 17.5rem;
409 }
410 .gameName:hover {
411 width: 23rem;
412 }
413
414 .smolMainText {
415 width: 30rem;
416 }
417 .footerText {
418 font-size: 0.89rem !important;
419 }
420}
421@media screen and (max-width: 550px) {
422 .optionButton:hover {background: var(--main1);}
423 .progressWrap:hover, .progressWrapb:hover {background: var(--main1);}
424 .menu-icon:hover, .gh-logo:hover, .dc-logo:hover, .lightModeButton:hover, .logo:hover {background-color: #00000000 !important;}
425 .pageBarImage:hover {background-color: transparent !important;}
426 .gameDetails:hover .gameName {width: 23rem !important;}
427 .footerSeparator {display: flex !important;}
428 .footerContent:hover {background-color: #00000000 !important;}
429 .pageBarContainer {gap: 0.6rem;}
430 .main {
431 width: 100vw;
432 }
433}
434
435@media screen and (min-width: 550px) {
436 .progressWrap:hover .progressBarInfo, .progressWrapb:hover .progressBarInfo{opacity: 1;}
437}