index/assets/styles/main.scss

575 lines
9.1 KiB
SCSS

@use 'animate.css';
// Modules.
@use 'transitions';
@use 'lists';
@tailwind base;
@tailwind components;
@tailwind utilities;
@font-face {
font-family: Enchant;
src:
url("~/assets/fonts/enchant/enchant.woff") format('woff'),
url("~/assets/fonts/enchant/enchant.woff2") format('woff2')
}
// CSS Variables.
:root {
--animate-duration: 1s;
--animate-delay: 0.75s;
--animate-repeat: 1;
}
@-moz-document url-prefix() {
html {
min-height: 128px;
scrollbar-width: thin;
scrollbar-color: rgb(255 255 255 / 15%) rgb(0 0 0 / 20%);
&.light {
scrollbar-color: rgb(0 0 0 / 15%) rgb(255 255 255 / 20%);
}
}
}
// The HTML page.
html {
height: 100dvh;
font-size: 14px;
::-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%);
}
&.light {
::-webkit-scrollbar-track {
background-color: rgb(255 255 255 / 15%);
}
::-webkit-scrollbar-thumb {
border-radius: 8px;
background-color: rgb(0 0 0 / 30%);
}
}
}
// 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;
height: 100%;
}
@layer base {
h1, h2, h3, h4, h5, h6,
.text-h1, .text-h2, .text-h3, .text-h4, .text-h5, .text-h6 {
@apply font-serif;
font-weight: bold;
}
h1, .text-h1 {
font-size: 2.5rem;
}
h2, .text-h2 {
font-size: 2rem;
}
h3, .text-h3 {
font-size: 1.75rem;
}
h4, .text-h4 {
font-size: 1.5rem;
}
h5, .text-h5 {
font-size: 1.25rem;
}
h6, .text-h6 {
font-size: 1rem;
}
small {
font-size: 0.75rem;
}
a {
@apply no-underline transition-all;
color: cornflowerblue;
&:hover {
color: royalblue;
}
}
center {
text-align: center;
margin: auto;
}
:not(nav) > ul {
list-style-type: disc;
padding-left: 1.5em;
}
:is(section, article, aside).page {
:is(div, p):not(:last-child) {
@apply mb-4;
}
:is(h1, h2, h3, h4, h5, h6) {
a {
@apply text-inherit no-underline transition-all;
&:hover {
color: indianred;
}
}
&:not(:last-child) {
@apply mb-2;
}
}
:is(ul, ol):not(:last-child) {
@apply mb-4;
}
:where(p, li) {
code {
&:hover {
background-color: rgb(138 71 245 / 20%);
}
padding: 0.25em;
border-radius: 0.5em;
cursor: pointer;
background-color: rgb(83 35 162 / 10%);
transition: 0.3s ease;
}
}
img {
@apply max-w-full max-h-[400px];
}
blockquote {
padding: 0.75em 1em;
border-left: 0.25em solid rgb(153 153 255 / 60%);
border-top-right-radius: 0.5em;
border-bottom-right-radius: 0.5em;
background-color: rgb(153 153 255 / 10%);
transition: 0.3s ease;
&:hover {
border-left-color: rgb(153 153 255 / 100%);
background-color: rgb(153 153 255 / 15%);
}
:last-child {
margin-bottom: 0;
}
}
pre {
font-size: 14px;
padding: 1em;
border-radius: 0.5em;
background-color: rgb(83 35 162 / 5%);
position: relative;
overflow-x: auto;
code {
counter-reset: step;
counter-increment: step 0;
scroll-padding: 0.5em;
.line::before {
content: counter(step);
counter-increment: step;
display: inline-block;
text-align: right;
color: rgb(238 246 250 / 40%);
width: 1rem;
margin-right: 1.5rem;
}
}
.button {
position: absolute;
top: 0;
right: 0;
margin: 0.5em;
padding: 0.5em;
cursor: pointer;
background-color: rgb(153 153 255 / 10%);
border: 1px solid rgb(153 153 255 / 60%);
border-radius: 0.5em;
opacity: 0;
transition: 0.3s ease;
}
&:hover {
.button {
opacity: 1;
}
}
}
}
}
// Entry point (Vue mount).
#ender-app {
flex: 1 0 auto;
image-rendering: auto;
}
// Helper classes that don't exist in Bootstrap.
.overlay {
grid-area: 1 / 1;
}
.pass-through {
pointer-events: none;
> * {
pointer-events: auto;
}
}
ruby {
ruby-position: under;
ruby {
ruby-position: over;
}
}
rt {
ruby-align: space-around;
}
.font-small {
font-size: 14px;
}
// Query-overridable classes.
.dimensions {
width: 100%;
min-height: 100%;
}
@layer utilities {
.accent-background {
background-color: rgb(0 0 0 / 50%);
}
.accent-overlay-background {
background-color: rgb(0 0 0 / 90%);
}
.accent-text {
color: white;
}
.accent-text-shadow {
text-shadow: black 2px 3px 4px;
}
.drop-shadow,
.accent-drop-shadow {
filter: drop-shadow(1px 2px 3px black);
}
.link-dark {
@apply text-inherit no-underline transition-all;
color: cornflowerblue;
&:hover {
color: royalblue;
}
}
.accent-fade {
background: linear-gradient(
to top,
black,
rgb(0 0 0 / 50%) 75%,
transparent
);
}
.fade-mask {
mask-image: linear-gradient(to bottom, transparent, black 3%, black 97%, transparent);
}
}
.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;
}
}
.accent-gradient {
background: radial-gradient(
circle at left,
rgb(255 255 255 / 80%),
rgb(255 255 255 / 75%),
rgb(255 255 255 / 0%)
);
}
.post {
scroll-snap-type: y mandatory;
scroll-snap-stop: normal;
&::after {
content: '';
scroll-snap-align: start;
}
&-box {
border-color: rgb(153 153 255 / 60%);
background-color: rgb(45 7 110 / 10%);
&:hover {
border-color: rgb(153 153 255 / 100%);
background-color: rgb(45 7 110 / 30%);
}
}
&-pocket {
background-color: rgb(153 153 255 / 10%);
border-left-color: rgb(153 153 255 / 60%);
border-top-color: rgb(153 153 255 / 60%);
}
&-tag {
background-color: rgb(153 153 255 / 10%);
border-color: rgb(153 153 255 / 60%);
}
}
:where(html.light) {
body {
color: black;
}
.accent-background {
background-color: rgb(255 255 255 / 90%);
}
.accent-overlay-background {
background-color: rgb(255 255 255 / 90%);
}
.accent-drop-shadow {
filter: drop-shadow(1px 2px 3px white);
}
a {
@apply no-underline transition-all;
color: royalblue;
&:hover {
color: darkblue;
}
}
.accent-text {
color: black;
}
.accent-gradient {
background: radial-gradient(
circle at left,
rgb(0 0 0 / 95%),
rgb(0 0 0 / 80%),
transparent
);
}
.accent-text-shadow {
text-shadow: white 1px 2px 3px;
}
.accent-fade {
background: linear-gradient(
to top,
white,
rgb(255 255 255 / 50%) 75%,
transparent
);
}
.post {
&-box {
border-color: rgb(123 123 255 / 1000%);
background-color: rgb(45 7 110 / 20%);
&:hover {
border-color: rgb(123 123 255 / 80%);
background-color: rgb(45 7 110 / 10%);
}
}
&-pocket {
background-color: rgb(123 123 255 / 10%);
border-left-color: rgb(123 123 255 / 80%);
border-top-color: rgb(123 123 255 / 80%);
}
&-tag {
background-color: rgb(123 123 255 / 10%);
border-color: rgb(123 123 255 / 80%);
}
}
}
// Dynamic classes.
@screen lm {
.dimensions {
width: 100% !important;
min-height: 100% !important;
}
}
@screen sm {
html {
font-size: 16px;
}
#ender-app {
height: 100dvh;
scrollbar-gutter: stable;
}
.dimensions {
width: 90%;
min-height: fit-content;
max-height: 90%;
}
.animate__animated-sm {
animation-duration: var(--animate-duration);
animation-fill-mode: both;
}
.animate__delay-1-5s {
animation-delay: calc(var(--animate-delay) * 1.5);
}
}
@screen md {
html {
font-size: 18px;
}
}
@screen lg {
html {
font-size: 20px;
}
.dimensions {
width: 75%;
}
}
@screen xl {
.dimensions {
width: 60%;
}
}
@screen 2xl {
.dimensions {
width: 50%;
}
}