index/assets/styles/main.scss

333 lines
5.0 KiB
SCSS

// Libraries.
@use 'bootstrap' with (
$grid-breakpoints: (
xs: 0,
sm: 601px,
md: 961px,
lg: 1281px,
xl: 1921px,
xxl: 2561px
)
);
@use 'animate.css';
// Modules.
@use 'transitions';
@use 'lists';
// CSS Variables.
:root {
--animate-duration: 1s;
--animate-delay: 0.75s;
--animate-repeat: 1;
}
// The HTML page.
html {
height: 100%;
}
// The body element.
body {
display: flex;
flex-direction: column;
position: sticky;
background-color: rgb(6 25 28);
background-image: url('~/assets/images/textures/sky.png');
background-attachment: fixed;
background-blend-mode: multiply;
background-size: cover;
background-repeat: no-repeat;
image-rendering: pixelated;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: white;
font-family: Lato, sans-serif;
font-size: 18px;
height: 100%;
}
// Entry point (Vue mount).
#ender-app {
flex: 1 1 0;
image-rendering: auto;
}
// Helper classes that don't exist in Bootstrap.
.nobr {
white-space: nowrap;
}
.clickable {
cursor: pointer;
}
.overlay {
grid-area: 1 / 1;
}
.pass-through {
pointer-events: none;
> * {
pointer-events: auto;
}
}
.no-decoration {
text-decoration: none;
color: inherit;
}
.text-align-center {
text-align: center;
}
.font-small {
font-size: 14px;
}
.grid-cols-3 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.display-sm {
display: none;
}
.alex {
font-family: Alexandria, sans-serif;
font-weight: 700;
}
// Query-overridable classes.
.background {
background-color: rgb(0 0 0 / 50%);
}
.dimensions {
width: 100%;
min-height: 100%;
}
.dialog {
display: grid;
min-width: 240px;
max-width: 640px;
background-color: rgb(25 20 40 / 95%);
box-shadow: rgb(81 75 89 / 50%) 7px 7px 2em;
border-radius: 16px !important;
> div.background {
background-image: url('~/assets/images/textures/aero.png');
background-attachment: scroll;
background-repeat: no-repeat;
background-size: cover;
background-blend-mode: lighten;
width: 100%;
height: 100%;
opacity: 0.2;
box-shadow: azure 0 0 20rem;
filter: blur(5px);
}
> div.content > img.icon-badge {
position: fixed;
margin-top: -20px;
margin-left: -20px;
transform: rotate(-25deg);
width: 60px;
height: 60px;
}
}
%link {
color: inherit;
text-decoration: none;
transition: 0.3s ease;
}
.link {
@extend %link;
&:hover {
color: cornflowerblue;
}
&-hi {
@extend %link;
color: cornflowerblue;
&:hover {
color: royalblue;
}
&-force-dark {
@extend %link;
color: cornflowerblue;
&:hover {
color: royalblue;
}
}
}
}
.radial-gradient {
background: radial-gradient(
circle at left,
rgb(255 255 255 / 80%),
rgb(255 255 255 / 75%),
rgb(255 255 255 / 0%)
);
}
.scrollbar {
min-height: 128px;
scrollbar-width: thin;
scrollbar-color: rgb(255 255 255 / 15%) rgb(0 0 0 / 20%);
&::-webkit-scrollbar {
width: 8px;
}
&::-webkit-scrollbar-track {
border-radius: 8px;
background-color: rgb(0 0 0 / 20%);
}
&::-webkit-scrollbar-thumb {
border-radius: 8px;
background-color: rgb(255 255 255 / 15%);
}
}
@media (prefers-color-scheme: light) {
body {
color: black;
}
.scrollbar {
scrollbar-color: rgb(0 0 0 / 20%) rgb(255 255 255 / 20%);
&::-webkit-scrollbar-track {
background-color: rgb(255 255 255 / 20%);
}
&::-webkit-scrollbar-thumb {
border-radius: 8px;
background-color: rgb(0 0 0 / 20%);
}
}
.background {
background-color: rgb(255 255 255 / 80%);
}
.link {
&:hover {
color: royalblue;
}
&-hi {
color: royalblue;
&:hover {
color: darkblue;
}
}
}
.radial-gradient {
background: radial-gradient(
circle at left,
rgb(0 0 0 / 95%),
rgb(0 0 0 / 80%),
rgb(0 0 0 / 0%)
);
}
}
.floaty {
position: fixed;
bottom: 0;
left: 0;
right: 0;
width: fit-content;
height: fit-content;
margin: auto;
}
// Dynamic classes.
@include bootstrap.media-breakpoint-up(sm) {
#ender-app {
height: 100%;
}
.scrollbar {
scrollbar-gutter: stable;
}
.dimensions {
width: 80%;
min-height: fit-content;
max-height: 90%;
}
.fade-mask-sm {
mask-image: linear-gradient(to bottom, rgb(0 0 0 / 0%), rgb(0 0 0 / 100%) 5%, rgb(0 0 0 / 100%) 95%, rgb(0 0 0 / 0%));
}
.rounded-1-sm {
border-radius: 1em;
}
.display-sm {
display: block;
}
.animate__animated-sm {
animation-duration: var(--animate-duration);
animation-fill-mode: both;
}
.animate__delay-1-5s {
animation-delay: calc(var(--animate-delay) * 1.5);
}
}
@include bootstrap.media-breakpoint-up(md) {
/* TODO: Fill it up :) */
}
@include bootstrap.media-breakpoint-up(lg) {
.dimensions {
width: 70%;
}
}
@include bootstrap.media-breakpoint-up(xl) {
.dimensions {
width: 40%;
}
}
@include bootstrap.media-breakpoint-up(xxl) {
.dimensions {
width: 30%;
}
}