2024-01-30 17:45:25 +01:00

846 lines
16 KiB
CSS

:root {
--background: #181e25;
--background-dark: #13181f;
--background-light: #202831;
--background-disabled: #212A34;
--background-note: #2C3540;
--background-warning: #3D3322;
--background-usage: #28313A;
--offwhite: #F2F2F2;
--offwhite-transparent: #F2F2F255;
--blue: #247be2;
--red: #FF5858;
--green: #8BFF63;
--lightgray: #cfd9e8;
--gray: #989898;
--darkgray: #3d4651;
--orange: #FF7B42;
--very-large: 18px;
--large: 16px;
--big: 15px;
--normal: 13px;
--small: 12px;
}
* {
font-family: "Open Sans", sans-serif;
box-sizing: border-box;
}
html {
height: 100%;
overflow: hidden;
}
body {
background-color: var(--background);
padding: 0px;
margin: 0px;
height: 100%;
overflow-x: auto;
}
/************************************************/
/* Title bar */
/************************************************/
#title-bar {
content: " ";
display: block;
-webkit-user-select: none;
-webkit-app-region: drag;
height: 30px;
width: 100%;
display: flex;
justify-content: end;
column-gap: 15px;
padding: 5px;
background-color: var(--background-dark);
}
#title-bar>*:first-child {
margin-right: auto;
color: #F2F2F2AA;
font-size: var(--small);
}
.title-bar-button {
background-color: transparent;
border: 0px solid transparent;
height: 20px;
width: 20px;
background-repeat: no-repeat;
background-position: 50% 50%;
cursor: pointer;
}
.minimize {
background-image: url("../icons/window-minimize-regular.svg");
}
.restore {
background-image: url("../icons/window-restore-regular.svg");
}
.maximize {
background-image: url("../icons/window-maximize-regular.svg");
}
.close {
background-image: url("../icons/xmark-solid.svg");
}
.close:hover {
background-color: darkred;
}
.title-bar-button {
-webkit-app-region: no-drag;
}
/************************************************/
/* Header */
/************************************************/
#header {
display: flex;
justify-content: start;
align-items: center;
color: #F2F2F2;
font-weight: bold;
font-size: var(--big);
padding: 20px 20px 20px 20px;
column-gap: 10px;
background-color: var(--background-dark);
width: 100%;
-webkit-user-select: none;
-webkit-app-region: drag;
}
#header .link {
-webkit-user-select: text;
-webkit-app-region: no-drag;
}
#header>div {
display: flex;
flex-direction: column;
justify-content: center;
height: 60px;
}
#header img.link {
height: 20px;
}
.link {
font-weight: normal;
text-decoration: underline;
cursor: pointer;
font-size: var(--big);
}
.link.first {
margin-left: auto;
}
.link>a:link {
color: var(--offwhite);
}
.link>a:visited {
color: var(--offwhite);
}
.main-icon {
width: 60px;
height: 60px;
}
/************************************************/
/* Loader */
/************************************************/
#loader {
color: var(--offwhite);
font-size: var(--large);
font-weight: normal;
position: absolute;
display: flex;
width: 100%;
align-items: center;
justify-content: center;
flex-direction: column;
row-gap: 10px;
}
.loading-bar {
border: 1px solid var(--offwhite);
border-radius: 2px;
position: relative;
}
.loading-bar::before {
content: "";
position: absolute;
width: var(--percent);
background-color: var(--offwhite);
height: 100%;
transition: width 0.25s linear;
}
/************************************************/
/* Scrollbar */
/************************************************/
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background-color: transparent;
border-bottom-right-radius: 10px;
border-top-right-radius: 10px;
margin-top: 0px;
}
::-webkit-scrollbar-thumb {
background-color: white;
border-radius: 100px;
margin-top: 10px;
opacity: 0.8;
}
/************************************************/
/* Manager page */
/************************************************/
.manager-page {
position: absolute;
min-width: 1200px;
overflow-y: auto;
transition: opacity 0.25s linear;
opacity: 0%;
/* By default has 0% opacity to allow for fade transition */
}
/************************************************/
/* Popup */
/************************************************/
#grayout {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.30);
z-index: 999;
transition: opacity 0.25s linear;
opacity: 0%;
/* By default has 0% opacity to allow for fade transition */
}
#popup {
width: 600px;
height: fit-content;
min-height: 200px;
position: absolute;
background-color: var(--background);
border-radius: 5px;
left: calc(50% - 300px);
top: calc(50% - 100px);
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 20px 40px;
align-items: start;
z-index: 999;
transition: opacity 0.25s linear;
opacity: 0%;
/* By default has 0% opacity to allow for fade transition */
}
#popup img {
width: 20px;
height: 20px;
}
#popup img.wait {
animation: rotate 2s linear infinite;
}
#popup .content {
color: var(--offwhite);
font-size: var(--normal);
font-weight: 600;
width: 100%;
text-align: left;
padding: 15px 0px !important;
word-wrap: break-word;
overflow-wrap: anywhere;
display: flex;
flex-direction: column;
row-gap: 10px;
}
#popup .footer {
height: fit-content;
display: flex;
justify-content: end;
width: 100%;
column-gap: 10px;
}
.close-popup {
color: var(--offwhite);
background-color: transparent;
border: 1px solid var(--offwhite);
}
.accept-popup {
color: var(--background);
background-color: var(--offwhite);
}
#popup .main-message {
font-size: var(--large);
max-width: 100%;
}
#popup .sub-message {
font-weight: normal;
}
/************************************************/
/* Inputs */
/************************************************/
input {
outline: none;
font-weight: 600;
color: var(--background);
font-size: var(--normal);
padding: 3px 10px;
border-radius: 5px;
text-align: left;
width: 300px;
}
.input-group {
color: var(--offwhite);
display: flex;
flex-direction: column;
row-gap: 5px;
align-items: start;
position: relative;
width: 500px;
}
.input-group>span:nth-child(1) {
font-size: var(--normal);
font-weight: 600;
}
.input-group>span:nth-child(2) {
font-size: var(--normal);
font-weight: normal;
}
.input-group div {
display: flex;
align-items: center;
column-gap: 5px;
flex-wrap: wrap;
}
.input-group span {
display: flex;
align-items: center;
column-gap: 5px;
flex-wrap: wrap;
}
.button {
padding: 10px 15px;
border-radius: 5px;
font-size: var(--normal);
font-weight: 600;
cursor: pointer;
display: flex;
align-items: center;
column-gap: 10px;
}
.button.radio {
border: 1px solid var(--offwhite);
color: var(--offwhite);
}
.button.radio.selected {
background-color: var(--offwhite);
color: var(--background);
}
.button.radio::before {
content: "";
display: block;
width: 10px;
height: 10px;
border: 1px solid var(--offwhite);
border-radius: 999px;
}
.button.radio.selected::before {
background-color: var(--offwhite);
border: 4px solid var(--background);
width: 4px;
height: 4px;
}
.button.collapse {
position: relative;
display: flex;
justify-content: space-between;
}
.button.collapse::after {
display: block;
content: " ";
width: 20px;
height: 20px;
background-image: url("../icons/chevron-down-solid.svg");
background-repeat: no-repeat;
background-position: 50% 50%;
}
.button.collapse.loading::after {
background-image: url("../icons/spinner-solid.svg");
animation: rotate 2s linear infinite;
}
.button.collapse>div {
display: none;
position: absolute;
transform: translate(-15px, calc(50% + 25px));
z-index: 999;
}
.button.collapse.open>div {
display: block;
}
.button.collapse .button {
color: var(--offwhite);
background-color: var(--background-light);
}
.button.collapse .button:hover {
color: var(--background);
background-color: var(--offwhite);
}
.button.collapse .button:first-child {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.button.collapse .button:not(:first-child):not(:last-child) {
border-radius: 0px;
}
.button.collapse .button:last-child {
border-top-left-radius: 0px;
border-top-right-radius: 0px;
}
.buttons-footer {
display: flex;
column-gap: 10px;
justify-content: start;
}
.checkbox {
position: relative;
height: 15px;
width: 15px;
border: 1px solid var(--offwhite);
border-radius: 2px;
}
.checkbox.checked::after {
display: block;
position: absolute;
content: "";
height: 3px;
width: 8px;
transform: translate(1px, -1px) rotate(-45deg);
border-left: 2px solid var(--offwhite);
border-bottom: 2px solid var(--offwhite);
}
/************************************************/
/* Port checks */
/************************************************/
.port-input .success,
.port-input .error {
position: absolute;
left: 320px;
display: flex;
width: 150px;
column-gap: 8px;
}
.port-input .success {
content: url("../icons/check-solid-green.svg");
height: 20px;
width: 20px;
}
.port-input .error img {
content: url("../icons/triangle-exclamation-solid.svg");
height: 20px;
width: 20px;
}
.port-input .error span {
font-weight: 600;
font-size: var(--small);
color: var(--red);
height: fit-content;
}
/************************************************/
/* Dashboard */
/************************************************/
.dashboard {
display: flex;
flex-direction: column;
row-gap: 15px;
height: 100%;
padding: 40px 80px;
}
.dashboard .scroll-container {
overflow-y: auto;
max-width: 100% !important;
width: 100%;
height: 100%;
}
.dashboard .scrollable {
display: flex;
row-gap: 15px;
column-gap: 15px;
height: fit-content;
width: 100%;
flex-wrap: wrap;
}
.dashboard .instructions {
display: flex;
flex-direction: column;
row-gap: 10px;
}
.dashboard .instructions .title {
color: var(--offwhite);
font-size: var(--very-large);
font-weight: 600;
}
.dashboard .instructions .subtitle {
color: var(--lightgray);
font-size: var(--normal);
}
.dashboard .content {
height: 100%;
overflow-x: hidden;
overflow-y: scroll;
display: flex;
flex-direction: column;
row-gap: 15px;
}
.dashboard .option {
background-color: var(--darkgray);
width: 48%;
color: white;
display: flex;
font-size: var(--normal);
font-weight: 600;
padding: 15px;
align-items: center;
border-radius: 5px;
border-left: 5px solid var(--blue);
flex-direction: column;
row-gap: 25px;
position: relative;
}
.dashboard .option:not(.installed) {
background-color: var(--background-disabled);
}
.dashboard .option:not(.installed) .info {
opacity: 50%;
}
.dashboard .option:not(.installed) .server-data {
opacity: 50%;
}
.dashboard .server-data {
display: flex;
column-gap: 15px;
row-gap: 5px;
flex-wrap: wrap;
}
.dashboard .server-status {
font-weight: 600;
font-size: var(--normal);
display: flex;
column-gap: 5px;
align-items: center;
}
.dashboard .server-status::before {
display: block;
content: "";
width: 15px;
height: 15px;
border-radius: 999px;
background-color: var(--gray);
}
.dashboard .server-status.offline {
color: var(--gray)
}
.dashboard .server-status.offline::before {
background-color: var(--gray);
}
.dashboard .server-status.online {
color: var(--green)
}
.dashboard .server-status.online::before {
background-color: var(--green);
}
.dashboard .server-status.backend {
margin-left: auto;
}
.dashboard .server-data-entry {
display: flex;
column-gap: 5px;
align-items: center;
}
.dashboard .server-data-entry span:nth-child(2) {
font-weight: 600;
}
.dashboard .server-data-entry span:nth-child(3) {
font-weight: normal;
}
.dashboard .instance-info {
display: flex;
flex-direction: column;
row-gap: 10px;
width: 100%;
}
.dashboard .instance-info>.name {
font-size: var(--large);
font-weight: 600;
}
.dashboard .instance-info>.folder {
font-size: var(--normal);
font-weight: normal;
color: var(--lightgray);
}
.dashboard .instance-info>.status {
font-size: var(--normal);
font-weight: 600;
color: var(--lightgray);
display: flex;
flex-direction: row;
column-gap: 8px;
}
.dashboard .instance-info>.status.installed {
font-weight: 600;
color: var(--green);
}
.dashboard .instance-info>.status.installed::before {
content: url("../icons/check-solid-green.svg");
height: 14px;
width: 14px;
}
.dashboard .instance-info>.status.error {
font-weight: 600;
color: orange;
}
.dashboard .instance-info>.status.error::before {
content: url("../icons/triangle-exclamation-solid-orange.svg");
height: 14px;
width: 14px;
}
.dashboard .instance-buttons {
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-between;
column-gap: 10px;
}
.dashboard .instance-info .info {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.dashboard .instance-info .info>div:nth-child(1) {
font-weight: 600;
font-size: var(--normal);
}
.dashboard .instance-info .info>div:nth-child(2) {
font-weight: normal;
font-size: var(--normal);
}
.dashboard .instance-info .divider {
margin-top: 5px;
margin-bottom: 5px;
}
.dashboard .start,
.dashboard .open-browser {
margin-right: auto;
color: var(--offwhite);
background-color: var(--blue);
}
.dashboard .start {
width: 160px;
}
.dashboard .start>div {
width: 160px;
}
.dashboard .edit,
.dashboard .install,
.dashboard .uninstall,
.dashboard .stop {
color: var(--offwhite);
background-color: transparent;
border: 1px solid var(--offwhite);
}
.dashboard .edit:hover,
.dashboard .install:hover,
.dashboard .uninstall:hover,
.dashboard .stop:hover {
color: var(--background);
background-color: var(--offwhite);
}
.dashboard .install {
margin-left: auto;
}
.dashboard .summary {
display: flex;
flex-direction: column;
row-gap: 5px;
}
.dashboard .logs-link {
position: absolute;
top: 15px;
right: 15px;
text-decoration: underline;
cursor: pointer;
}
.dashboard .divider {
border-top: 0px solid transparent !important;
border-bottom: 1px solid var(--offwhite) !important;
opacity: 80%;
height: 0px !important;
cursor: default;
}
/************************************************/
/* Result summary */
/************************************************/
.result-summary {
padding: 25px 15px;
display: flex;
flex-direction: column;
row-gap: 10px;
}
.result-summary .title {
font-weight: bold;
font-size: var(--big);
display: flex;
align-items: center;
}
.result-summary .title img {
margin-right: 10px;
}
.result-summary .description {
font-size: var(--normal);
}
.result-summary.success{
color: var(--background-color);
background-color: var(--green);
}
.result-summary.error{
color: var(--background-color);
background-color: var(--red);
}
/************************************************/
/* Misc */
/************************************************/
.accent-red {
color: var(--red);
}
.accent-green {
color: var(--green);
}
.hide {
display: none !important;
}
/************************************************/
/* Animations */
/************************************************/
@keyframes rotate {
0% {
transform: rotate(0deg)
}
100% {
transform: rotate(360deg)
}
}