434 lines
7.8 KiB
CSS
434 lines
7.8 KiB
CSS
/**
|
|
* RetroArch Web Player
|
|
*
|
|
* This provides the basic styling for the RetroArch web player.
|
|
*/
|
|
|
|
@import url("https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400..700&display=swap");
|
|
|
|
@keyframes loaded {
|
|
from {
|
|
opacity: 0.2;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes loading {
|
|
from {
|
|
opacity: 0.2;
|
|
}
|
|
to {
|
|
opacity: 0.35;
|
|
}
|
|
}
|
|
|
|
/* real ozone */
|
|
@keyframes hover {
|
|
from {
|
|
box-shadow: 0px 0px 1px 1px #198AC6, inset 0px 0px 1px 1px #198AC6;
|
|
}
|
|
to {
|
|
box-shadow: 0px 0px 1px 1px #89F1F2, inset 0px 0px 1px 1px #89F1F2;
|
|
}
|
|
}
|
|
|
|
@keyframes hover-danger {
|
|
from {
|
|
box-shadow: 0px 0px 1px 1px #C7261A, inset 0px 0px 1px 1px #C7261A;
|
|
}
|
|
to {
|
|
box-shadow: 0px 0px 1px 1px #F75C4A, inset 0px 0px 1px 1px #F75C4A;
|
|
}
|
|
}
|
|
|
|
body {
|
|
margin: 0px;
|
|
background-color: black;
|
|
font-family: "Inter", sans-serif;
|
|
font-variant-ligatures: no-contextual;
|
|
scrollbar-color: #505050 #2e2e2e;
|
|
|
|
--menuheight: 65px;
|
|
--menumarginy: 14px;
|
|
--menumarginx: 7px;
|
|
--menupaddingy: 8px;
|
|
--menupaddingx: 16px;
|
|
--submarginy: 0px;
|
|
--submarginx: 0px;
|
|
--subpaddingy: 5px;
|
|
--subpaddingx: 8px;
|
|
--rounding: 1px;
|
|
--barcolor: #2e2e2e;
|
|
--subcolor: #282828;
|
|
--barbuttoncolor: var(--barcolor);
|
|
--barbuttonhovercolor: #212227;
|
|
--barbuttonoutline: 1px;
|
|
--barbuttonoutlinecolor: #51514f;
|
|
--barfontcolor: #ffffff;
|
|
--bardisabledfontcolor: #b6b6b6;
|
|
|
|
/* do not modify */
|
|
--actualmenuheight: var(--menuheight);
|
|
--menubuttonbordery: calc(var(--menuheight) - calc(var(--menumarginy) * 2));
|
|
--menubuttoncontenty: calc(var(--menubuttonbordery) - calc(var(--menupaddingy) * 2));
|
|
}
|
|
|
|
canvas.webplayer, #webplayer-preview {
|
|
display: block;
|
|
position: fixed;
|
|
top: var(--actualmenuheight);
|
|
width: 100vw;
|
|
height: calc(100vh - var(--actualmenuheight));
|
|
outline: none;
|
|
z-index: 4;
|
|
}
|
|
|
|
#webplayer-preview {
|
|
background-image: url(media/canvas.png);
|
|
background-size: contain;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
cursor: wait;
|
|
opacity: 0.2;
|
|
transition: opacity 0.8s;
|
|
animation: loading 0.8s ease-in-out infinite alternate;
|
|
z-index: 5;
|
|
}
|
|
|
|
#webplayer-preview.loaded {
|
|
cursor: pointer;
|
|
opacity: 1;
|
|
animation: loaded 0.8s ease-in-out;
|
|
}
|
|
|
|
/**
|
|
* Hack to make emscripten stop messing with the canvas size while in fullscreen.
|
|
* Foiled again!
|
|
*/
|
|
:fullscreen canvas.webplayer {
|
|
top: 0px;
|
|
min-width: 100vw;
|
|
max-width: 100vw;
|
|
min-height: 100vh;
|
|
max-height: 100vh;
|
|
}
|
|
|
|
a {
|
|
color: #3ec3f0;
|
|
}
|
|
|
|
/* menu bar */
|
|
|
|
#navbar {
|
|
position: fixed;
|
|
width: 100vw;
|
|
height: var(--actualmenuheight);
|
|
background-color: var(--barcolor);
|
|
color: var(--barfontcolor);
|
|
z-index: 20;
|
|
user-select: none;
|
|
}
|
|
|
|
#menu {
|
|
float: left;
|
|
list-style: none;
|
|
margin: 0px;
|
|
width: max-content;
|
|
height: 100%;
|
|
padding: 0px var(--menumarginx);
|
|
}
|
|
|
|
.progressContainer {
|
|
width: 100%;
|
|
float: left;
|
|
}
|
|
|
|
.progressBar {
|
|
width: 100%;
|
|
height: 0px;
|
|
--progressbarpercent: 0%;
|
|
--progressbarcolor: #1fb01a;
|
|
}
|
|
|
|
.progressBar::after {
|
|
content: "";
|
|
display: block;
|
|
width: var(--progressbarpercent);
|
|
height: 100%;
|
|
transition: width 0.2s ease-out;
|
|
background-color: var(--progressbarcolor);
|
|
}
|
|
|
|
.progressText {
|
|
padding: 0px 4px;
|
|
}
|
|
|
|
#menu li {
|
|
white-space: nowrap;
|
|
max-width: 500px;
|
|
position: relative;
|
|
outline: none;
|
|
}
|
|
|
|
#menu>li {
|
|
margin: var(--menumarginy) var(--menumarginx);
|
|
display: inline-block;
|
|
float: left;
|
|
height: var(--menubuttoncontenty);
|
|
line-height: var(--menubuttoncontenty);
|
|
border-radius: var(--rounding);
|
|
background-color: var(--barbuttoncolor);
|
|
outline: var(--barbuttonoutline) solid var(--barbuttonoutlinecolor);
|
|
font-size: 12pt;
|
|
}
|
|
|
|
.dropdown-parent {
|
|
height: var(--menubuttonbordery) !important;
|
|
}
|
|
|
|
.dropdown-parent>label {
|
|
display: inline-block;
|
|
}
|
|
|
|
#menu>li:not(.dropdown-parent),
|
|
.dropdown-parent>label {
|
|
padding: var(--menupaddingy) var(--menupaddingx);
|
|
}
|
|
|
|
label {
|
|
cursor: inherit;
|
|
}
|
|
|
|
.ozone-list {
|
|
background-color: var(--subcolor);
|
|
width: max-content;
|
|
padding: 1px;
|
|
}
|
|
|
|
.dropdown-child {
|
|
position: absolute;
|
|
overflow: hidden auto;
|
|
max-height: calc(100vh - var(--actualmenuheight));
|
|
display: none;
|
|
top: calc(100% + 1px);
|
|
left: 0px;
|
|
border-radius: var(--rounding);
|
|
box-sizing: border-box;
|
|
z-index: 1;
|
|
}
|
|
|
|
#fileManagerPanel {
|
|
margin: auto;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.ozone-list>* {
|
|
display: block;
|
|
border-radius: var(--rounding);
|
|
text-decoration: none;
|
|
color: inherit;
|
|
margin: var(--submarginy) var(--submarginx);
|
|
padding: 8px 12px;
|
|
line-height: initial;
|
|
font-size: 10pt;
|
|
outline: none;
|
|
user-select: none;
|
|
}
|
|
|
|
.dropdown-child>* {
|
|
padding: var(--subpaddingy) var(--subpaddingx);
|
|
}
|
|
|
|
.ozone-list>*:not(:last-child) {
|
|
box-shadow: 0px 2px 0px -1px var(--barbuttonoutlinecolor);
|
|
}
|
|
|
|
#menu>li:not(.disabled),
|
|
.ozone-list>*:not(.disabled) {
|
|
cursor: pointer;
|
|
}
|
|
|
|
#menu .disabled,
|
|
.ozone-list .disabled {
|
|
cursor: not-allowed !important;
|
|
color: var(--bardisabledfontcolor);
|
|
}
|
|
|
|
#menu>li:not(.disabled):not(.dropdown-parent:has(.dropdown-child:hover)):hover,
|
|
.ozone-list>*:hover,
|
|
.ozone-list>*:focus,
|
|
#menuhider:not(:checked) ~ .menuhiderlabel:hover {
|
|
background-color: var(--barbuttonhovercolor);
|
|
outline: none;
|
|
animation: hover 0.5s ease-in-out infinite alternate;
|
|
}
|
|
|
|
.ozone-list>.danger:hover,
|
|
.ozone-list>.danger:focus {
|
|
animation: hover-danger 0.5s ease-in-out infinite alternate;
|
|
}
|
|
|
|
/* hide/show the menu */
|
|
|
|
.menuhiderlabel {
|
|
position: absolute;
|
|
top: 0px;
|
|
right: 0px;
|
|
width: 45px;
|
|
height: 45px;
|
|
cursor: pointer;
|
|
z-index: 1;
|
|
}
|
|
|
|
#menuhider:not(:checked) ~ .menuhiderlabel {
|
|
margin: var(--menumarginy) 0px;
|
|
margin-right: calc(var(--menumarginx) * 2);
|
|
width: var(--menubuttonbordery) !important;
|
|
height: var(--menubuttonbordery) !important;
|
|
border-radius: var(--rounding);
|
|
background-color: var(--barbuttoncolor);
|
|
outline: var(--barbuttonoutline) solid var(--barbuttonoutlinecolor);
|
|
}
|
|
|
|
.menuhiderlabel span {
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
transition: transform 0.2s ease;
|
|
}
|
|
|
|
#menuhider:checked ~ .menuhiderlabel span {
|
|
transform: translate(-50%, -50%) scaleY(-1);
|
|
color: #dfdfdf !important;
|
|
}
|
|
|
|
#menuhider:checked ~ .menuhiderlabel:hover {
|
|
background-color: rgba(0, 0, 0, 0.1) !important;
|
|
}
|
|
|
|
.hide,
|
|
#dropdown-box,
|
|
#menuhider,
|
|
#menuhider:checked ~ #menu {
|
|
display: none !important;
|
|
}
|
|
|
|
#dropdown-box:checked ~ .dropdown-child {
|
|
display: block;
|
|
}
|
|
|
|
/* modals */
|
|
|
|
#modals {
|
|
display: none;
|
|
background-color: rgba(0, 0, 0, 0.4);
|
|
backdrop-filter: blur(6px);
|
|
position: fixed;
|
|
width: 100vw;
|
|
height: 100vh;
|
|
z-index: 30;
|
|
}
|
|
|
|
#modal-window {
|
|
background-color: var(--barcolor);
|
|
color: var(--barfontcolor);
|
|
position: fixed;
|
|
left: 50%;
|
|
top: 50%;
|
|
transform: translate(-50%, -50%);
|
|
left: round(50%, 1px);
|
|
top: round(50%, 1px);
|
|
transform: translate(round(-50%, 1px), round(-50%, 1px));
|
|
max-height: calc(100vh - 40px);
|
|
max-width: calc(100vw - 40px);
|
|
width: 750px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.modal-header {
|
|
height: 50px;
|
|
line-height: 30px;
|
|
}
|
|
|
|
.modal-header .progressContainer {
|
|
position: absolute;
|
|
top: 50px;
|
|
}
|
|
|
|
.modal-header .progressText {
|
|
white-space: nowrap;
|
|
font-size: 10pt;
|
|
}
|
|
|
|
#modal-title {
|
|
display: inline-block;
|
|
margin: 10px;
|
|
}
|
|
|
|
#modal-close {
|
|
float: right;
|
|
width: 30px;
|
|
text-align: center;
|
|
cursor: pointer;
|
|
font-size: 24px;
|
|
margin: 10px;
|
|
}
|
|
|
|
.modal-body {
|
|
display: none;
|
|
width: calc(100% - 40px);
|
|
max-height: calc(100vh - 135px);
|
|
padding: 20px;
|
|
padding-top: 0px;
|
|
margin-top: 25px;
|
|
overflow: auto;
|
|
}
|
|
|
|
.modal-body>*:first-child {
|
|
margin-top: 0px;
|
|
}
|
|
|
|
/* debug */
|
|
|
|
.retroarchWebcamVideo, .retroarchWebcamCanvas {
|
|
position: absolute;
|
|
left: 0px;
|
|
top: 0px;
|
|
z-index: 5000;
|
|
}
|
|
|
|
.retroarchWebcamCanvas {
|
|
top: 112px;
|
|
}
|
|
|
|
/* mobile */
|
|
|
|
@media only screen and (max-width: 720px) {
|
|
body {
|
|
--subpaddingy: 8px;
|
|
}
|
|
|
|
#menu {
|
|
width: calc(100% - calc(var(--menumarginx) * 2));
|
|
height: max-content;
|
|
padding-bottom: var(--menumarginy);
|
|
background-color: var(--barcolor);
|
|
}
|
|
|
|
#menu>li {
|
|
margin-bottom: 0px;
|
|
}
|
|
|
|
.dropdown-child {
|
|
max-width: calc(100vw - calc(var(--menumarginx) * 4));
|
|
width: max-content;
|
|
}
|
|
|
|
.dropdown-child a {
|
|
white-space: normal;
|
|
}
|
|
}
|