icy3dw/src/client/scss/index.scss

283 lines
5.2 KiB
SCSS

*, *::before, *::after {
box-sizing: border-box;
}
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}
.joystick {
width: var(--size);
height: var(--size);
background-color: #e7e7e7b3;
border-radius: 100%;
border: 2px solid #ddd;
z-index: 1000;
&__wrapper {
display: none;
position: absolute;
left: calc(50% - var(--size) / 2);
bottom: 10px;
}
&__knob {
width: calc(var(--size) / 2);
height: calc(var(--size) / 2);
position: absolute;
background-color: #fff;
border: 2px solid #ddd;
border-radius: 100%;
cursor:grab;
transform-origin: center center;
}
&__button {
position: absolute;
appearance: none;
left: var(--button-x);
top: var(--button-y);
width: 48px;
height: 48px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 100%;
background-color: rgba(231, 231, 231, 0.7019607843);
border: 2px solid #ddd;
z-index: 1001;
color: #5c5c5c;
font-weight: bold;
transition: border 250ms linear, background-color 250ms linear;
&--active {
border-width: 4px;
border-color: #db8f00;
background-color: rgb(231 231 231 / 78%);
}
}
}
.chat {
min-width: 200px;
width: 40vw;
max-height: 180px;
height: 180px;
display: flex;
flex-direction: column;
&__toggle {
width: 24px;
height: 24px;
appearance: none;
background-color: #fff;
background-position: center center;
background-repeat: no-repeat;
cursor: pointer;
background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 style=%27width:24px;height:24px%27 viewBox=%270 0 24 24%27%3E%3Cpath fill=%27%23878787%27 d=%27M20 2H4C2.9 2 2 2.9 2 4V22L6 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2M20 16H5.2L4 17.2V4H20V16Z%27 /%3E%3C/svg%3E");
padding: 1rem;
border: 2px solid transparent;
border-radius: 100%;
background-size: 70%;
margin-bottom: 0.5rem;
transition-property: background-color, border-color;
transition-timing-function: linear;
transition-duration: 150ms;
&:hover {
background-color: rgb(233, 233, 233);
}
}
&__wrapper {
position: absolute;
bottom: 8px;
left: 8px;
z-index: 2000;
}
&__history {
flex-grow: 1;
overflow-y: scroll;
padding: 0.15rem;
}
&__input {
flex-grow: 1;
&-wrapper {
display: flex;
flex-direction: row;
}
}
&__message {
display: flex;
flex-direction: row;
gap: 0.5rem;
text-shadow: 1px 1px 2px black;
&-timestamp {
color: #646464;
&::before {
content: '[';
}
&::after {
content: ']';
}
}
&-sender {
color: var(--name-color);
&::before {
content: '<';
}
&::after {
content: '>';
}
}
&-content {
--text-color: #fff;
color: var(--text-color);
overflow-wrap: anywhere;
}
}
&__wrapper.invisible {
.chat {
&__input-wrapper {
display: none;
}
&__history {
overflow: hidden;
}
&__message {
visibility: visible;
opacity: 1;
&--old {
visibility: hidden;
opacity: 0;
transition: visibility 0s 2s, opacity 2s linear;
}
}
}
}
&__wrapper.visible {
.chat__history {
background-color: rgba(73, 73, 73, 0.3);
}
.chat__toggle {
border-color: #878787;
}
}
}
@media all and (max-width: 737px) {
.chat {
&__wrapper {
right: 8px;
&:not(.visible) {
&, *:not(input):not(button) {
pointer-events: none;
}
button, input {
pointer-events: all;
}
}
}
min-width: 100%;
width: 100%;
}
}
.loading {
display: flex;
flex-direction: column;
max-width: 400px;
width: 100vw;
margin: 10% auto;
text-align: center;
font-size: 2rem;
padding: 2rem;
&__wrapper {
position: absolute;
z-index: 3000;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: #202020;
color: #fff;
transition: opacity 1s linear;
opacity: 1;
pointer-events: none;
&.loading--complete {
opacity: 0;
}
&.loading--error {
.loading__bar {
display: none;
}
}
}
&__bar {
width: 100%;
height: 20px;
margin-top: 2rem;
background-color: #141414;
border-radius: 4px;
overflow: hidden;
&-inner {
width: var(--loading-percentage);
height: 20px;
background-color: #1098ab;
transition: width 50ms linear;
background-image: linear-gradient(
-45deg,
rgba(255, 255, 255, .2) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, .2) 50%,
rgba(255, 255, 255, .2) 75%,
transparent 75%,
transparent
);
z-index: 1;
background-size: 50px 50px;
animation: move 2s linear infinite;
}
}
}
@keyframes move {
0% {
background-position: 0 0;
}
100% {
background-position: 50px 50px;
}
}