Refactored code into components, added custom colors support inside the json config, added the page name attribute and fixed mouse wheel control on mobile devices
All checks were successful
Build and deploy all / build (amiral.json, /var/www/amiral, amiral) (push) Successful in 47s
Build and deploy all / build (atlantis.json, /var/www/atlantis, atlantis) (push) Successful in 43s
Build and deploy all / build (harbor.json, /var/www/harbor, harbor) (push) Successful in 43s
Build and deploy all / deploy (amiral.json, /var/www/amiral, amiral) (push) Successful in 14s
Build and deploy all / deploy (atlantis.json, /var/www/atlantis, atlantis) (push) Successful in 12s
Build and deploy all / deploy (harbor.json, /var/www/harbor, harbor) (push) Successful in 12s
Build and deploy all / notify (push) Successful in 2s

This commit is contained in:
Gu://em_ 2026-03-31 18:11:02 +02:00
parent c0ed3d2d1d
commit d5b638405f
14 changed files with 988 additions and 813 deletions

225
src/components/Card.astro Normal file
View file

@ -0,0 +1,225 @@
---
const { link, icon, title, description } = Astro.props;
---
<a class="card" href={link}>
<img src={icon} width={80} height={80} />
<div class="card-title">{title}</div>
<div class="card-desc">{description}</div>
</a>
<!--Default---------------------------------------------------------->
<style>
.card {
position: relative;
top: 0px;
width: 500px;
height: 290px;
margin-top: 4rem;
background-color: var(--card-background);
border: 4px solid transparent;
border-radius: 1.4em;
background-clip: padding-box;
transition: 300ms;
}
/*Cards borders*/
.card::after {
position: absolute;
top: -0.05em;
bottom: -0.05em;
left: -0.05em;
right: -0.05em;
background: linear-gradient(
135deg,
var(--card-gradient-left) 0%,
var(--card-gradient-right) 100%
);
content: "";
z-index: -1;
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 2em 40px);
transition: 500ms;
}
.card:hover {
top: -1%;
}
.card:hover::after {
background: linear-gradient(
135deg,
var(--card-hover-gradient-left) 0%,
var(--card-hover-gradient-right) 100%
);
filter: drop-shadow(var(--card-hover-shadow) 0 2em 40px);
top: -0.1em;
bottom: -0.1em;
left: -0.1em;
right: -0.1em;
}
.card-title {
position: absolute;
top: 12%;
left: 25%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 2em;
color: var(--text);
}
.card-desc {
position: absolute;
top: 50%;
left: 25%;
height: fit-content;
width: 65%;
font-family: "IBM Plex Mono";
font-size: 1.4em;
color: var(--text);
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 4em;
height: 4em;
}
</style>
<!--Tablets---------------------------------------------------------->
<style>
@media (max-width: 1210px) AND (min-width: 800px) {
.card {
position: relative;
width: 100%;
/*max-width: 300px;*/
height: auto;
min-height: 14rem;
margin: 0;
padding: 1.4rem;
background-color: #121212;
box-sizing: border-box;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 3em;
height: 3em;
}
.card-title {
position: absolute;
top: 12%;
left: 23%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 1.6em;
color: #eaeaea;
}
.card-desc {
position: static;
width: 100%;
margin-top: 5em;
margin-left: 0;
font-size: 1.2em;
color: #eaeaea;
text-align: center;
}
}
</style>
<!--Mobile---------------------------------------------------------->
<style>
@media (max-width: 800px) {
.card {
position: relative;
width: 90vw;
max-width: 420px;
height: auto;
min-height: 14rem;
margin: 1rem 0;
padding: 1.2rem 1rem;
background-color: #121212;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: static;
width: 3em;
height: 3em;
margin-bottom: 0.8em;
margin-right: 0;
margin-top: 0.2em;
flex-shrink: 0;
display: block;
}
.card-title {
position: static;
margin-bottom: 0.5em;
margin-top: 0.2em;
margin-left: 0;
font-size: 1.7em;
font-weight: 600;
color: #eaeaea;
text-align: center;
text-decoration: none;
}
.card-desc {
position: static;
width: 100%;
margin-top: 1em;
margin-left: 0;
font-size: 1em;
color: #eaeaea;
text-align: center;
}
}
</style>

81
src/components/Logo.astro Normal file
View file

@ -0,0 +1,81 @@
---
const { logo, link, text } = Astro.props;
---
<a href={link}>
<img class="logo" src={logo} alt="://" />
</a>
<div class="instance-name">
{text}
</div>
<!--Default---------------------------------------------------------->
<style>
.logo {
position: fixed;
top: 1.8rem;
left: 2rem;
width: 3.7rem;
height: 3.7rem;
transition-duration: 500ms;
}
.logo:hover {
filter: drop-shadow(0 0 4px #7782ff);
-webkit-filter: drop-shadow(0 0 4px #7782ff);
transition: cubic-bezier(0.075, 0.82, 0.165, 1);
transition-duration: 500ms;
}
.instance-name {
position: fixed;
top: 2rem;
left: 6.5rem;
color: var(--text);
font-family: "IBM Plex Mono";
font-weight: 600;
font-size: 2.5em;
}
</style>
<!--Tablets---------------------------------------------------------->
<style>
@media (max-width: 1210px) AND (min-width: 800px) {
.logo {
position: absolute;
top: 1.3rem;
left: 1.3rem;
z-index: 2;
width: 3rem;
height: 3rem;
margin: 0;
padding: 0;
display: block;
pointer-events: auto;
}
.instance-name {
display: none;
}
}
</style>
<!--Mobile---------------------------------------------------------->
<style>
@media (max-width: 800px) {
.logo {
display: none;
}
.instance-name {
display: none;
}
}
</style>

View file

@ -1,6 +1,23 @@
{
"website_title": "Website Title",
"website_logo": "https://...",
"page_name": "",
"website_status_link": "https://...",
"colors": {
"primary_accent": "#353be5",
"secondary_accent": "#353be5",
"background": "#000000",
"text": "#eaeaea",
"cards": {
"background": "#121212",
"text": "#eaeaea",
"gradient_left": "#353be5",
"gradient_right": "#43434388",
"hover_gradient_left": "#4000ff",
"hover_gradient_right": "#353be570",
"hover_shadow": "#4f35e5a0"
}
},
"cards": [
{
"title": "Card One",

View file

@ -1,66 +1,98 @@
---
import "../styles/common.css";
import "../styles/mobile.css";
import "../styles/tablet.css";
// === Imports
import "../styles/global.css";
import "./index.css";
import Card from "../components/Card.astro";
import Logo from "../components/Logo.astro";
import data from "../data/content.json";
const { cards, website_title, website_logo } = data;
// === Defaults
const defaultColors = {
accent: "#353be5",
background: "#000000",
text: "#eaeaea",
cards: {
background: "#121212",
text: "#eaeaea",
gradient_left: "#353be5",
gradient_right: "#43434388",
hover_gradient_left: "#4000ff",
hover_gradient_right: "#353be570",
hover_shadow: "#4f35e5a0",
},
};
// === Configs
const { cards, website_title, website_logo, website_status_link, page_name } =
data;
const theme = { ...defaultColors, ...data.colors };
---
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<!-- <link rel="stylesheet" href="style.css" /> -->
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<!-- DISABLED because it prevents the font from loading -->
<!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"> -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#000000" />
<title>{website_title}</title>
<style define:vars={theme}></style>
<style
define:vars={{
// Flatten card object to use inside css
"card-background": theme.cards.background,
"card-text": theme.cards.text,
"card-gradient-left": theme.cards.gradient_left,
"card-gradient-right": theme.cards.gradient_right,
"card-hover-gradient-left": theme.cards.hover_gradient_left,
"card-hover-gradient-right": theme.cards.hover_gradient_right,
"card-hover-shadow": theme.cards.hover_shadow,
}}
></style>
</head>
<body>
<div class="halo"></div>
<header class="site-header">
<div class="header-row">
<a href="https://status.oblic-parallels.fr">
<img class="logo" src={website_logo} />
</a>
<Logo
logo={website_logo}
link={website_status_link}
text={page_name}
/>
<h1 class="site-title">{website_title}</h1>
</div>
<div class="welcome-title">
<h2>Welcome to</h2>
</div>
</header>
<script>
window.addEventListener(
"wheel",
function (e) {
if (e.deltaY !== 0) {
e.preventDefault();
window.scrollBy({
left: e.deltaY,
behavior: "auto",
});
}
},
{ passive: false },
);
</script>
<div class="card-container">
{
cards.map((card) => (
<a class="card" href={card.link}>
<img src={card.icon} />
<div class="card-title">{card.title}</div>
<div class="card-desc">{card.description}</div>
</a>
))
}
{cards.map((info) => <Card {...info} />)}
</div>
</body>
<!-- Vertical scroll conversion -->
<script>
window.addEventListener(
"wheel",
function (e) {
if (window.innerWidth > 1210 && e.deltaY !== 0) {
e.preventDefault();
window.scrollBy({
left: e.deltaY,
behavior: "auto",
});
}
},
{ passive: false },
);
</script>
</html>

337
src/pages/index.css Normal file
View file

@ -0,0 +1,337 @@
/*-Computer-Screen-----------------------------------------------------*/
/*-(Default)-----------------------------*/
html,
body {
height: 100%;
margin: 0;
}
body {
user-select: none;
background: radial-gradient(
circle at 50% 200%,
var(--accent) 40%,
var(--accent) 45%,
#00000000 80%
);
background-color: var(--background);
background-size: cover;
background-attachment: fixed;
padding: 0;
font-family: "Inter";
}
/*-Texts-----------------------------*/
h1 {
position: fixed;
top: 27%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: var(--text);
text-align: center;
font-family: "Inter";
font-weight: 600;
font-size: 500%;
user-select: none;
letter-spacing: 0.1rem;
}
h2 {
position: fixed;
top: 16%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: var(--text);
text-align: center;
font-family: "IBM Plex Mono";
font-weight: 400;
font-size: 250%;
user-select: none;
}
/*-Cards-----------------------------*/
.card-container {
position: absolute;
bottom: 10%;
z-index: 1;
height: 40%;
/*Calculate offset to center the second card (if possible) */
/* screen_width - (card1_width + card2_margins)/2 */ /* Width includes margins */
padding-left: calc(max(50vw - ((500px + 2rem) + (500px + 6rem) / 2), 4rem));
padding-right: 4rem;
display: flex;
flex-direction: row;
justify-content: flex-start;
gap: 4rem;
align-items: center; /* Vertical alignment */
overflow: visible; /* Prevent cards shadows to be cut off */
/* Hide scrollbar for Chrome and Safari */
/*&::-webkit-scrollbar {
display: none;
}*/
/* Hide scrollbar for IE, Edge and Firefox */
/*-ms-overflow-style: none;
scrollbar-width: none;*/
}
/*-Tablet-Screen-----------------------------------------------------*/
@media (max-width: 1210px) AND (min-width: 800px) {
/*-Page-----------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
height: auto;
margin: 0;
padding: 0;
overflow-x: hidden;
overflow-y: auto;
}
body {
font-family: "Inter";
background-color: #000;
background-size: cover;
background-attachment: fixed;
}
/*-Header-----------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: #00000090;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
/*mask: linear-gradient(black, black, transparent);*/
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts-----------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards-----------------------------*/
.card-container {
position: relative;
left: 0;
right: 0;
bottom: 0;
top: 22rem;
min-height: 0;
height: calc(100vh - 5.5rem);
width: 80vw;
max-width: 1200px; /* Prevents from getting too wide */
margin: 0 auto; /* 'auto' centers it horizontally */
padding-bottom: 10%;
display: grid;
/* 2 equal columns ('1fr' means 1 fraction of available space) */
grid-template-columns: repeat(2, 1fr);
overflow: visible;
gap: 3rem;
}
}
/*-Phone-Screen-----------------------------------------------------*/
@media (max-width: 800px) {
/*-Page-----------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
margin: 0;
padding: 0;
overflow-x: hidden;
}
body {
font-family: "Inter";
background-color: #000;
}
/*-Header-----------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: transparent;
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts-----------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards-----------------------------*/
.card-container {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 5.5rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
width: 100vw;
min-height: 0;
height: calc(100vh - 5.5rem);
margin: 0;
padding: 10rem 1rem 1rem 1rem;
gap: 1rem;
overflow-x: hidden;
overflow-y: auto;
box-sizing: border-box;
background: transparent;
}
}

View file

@ -1,193 +0,0 @@
/*-Impports----------------------------------------------------------*/
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
/*-Fonts----------------------------------------------------------*/
/*-Page----------------------------------------------------------*/
html,
body {
height: 100%;
margin: 0;
}
body {
user-select: none;
background: radial-gradient(
circle at 50% 200%,
#353be5 0%,
#353be5 45%,
#00000000 80%
);
background-color: #000000;
background-size: cover;
background-attachment: fixed;
padding: 0;
font-family: "Inter";
}
/*-Texts----------------------------------------------------------*/
h1 {
position: fixed;
top: 27%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: #eaeaea;
text-align: center;
font-family: "Inter";
font-weight: 600;
font-size: 500%;
user-select: none;
letter-spacing: 0.1rem;
}
h2 {
position: fixed;
top: 16%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: white;
text-align: center;
font-family: "IBM Plex Mono";
font-weight: 400;
font-size: 250%;
user-select: none;
}
/*-Cards----------------------------------------------------------*/
.card-container {
position: absolute;
bottom: 10%;
z-index: 1;
height: 40%;
/*Calculate offset to center the second card (if possible) */
/* screen_width - (card1_width + card2_margins)/2 */ /* Width includes margins */
padding-left: calc(max(50vw - ((500px + 2rem) + (500px + 6rem) / 2), 4rem));
padding-right: 4rem;
display: flex;
flex-direction: row;
justify-content: flex-start;
gap: 4rem;
align-items: center; /* Vertical alignment */
overflow: visible; /* Prevent cards shadows to be cut off */
/* Hide scrollbar for Chrome and Safari */
/*&::-webkit-scrollbar {
display: none;
}*/
/* Hide scrollbar for IE, Edge and Firefox */
/*-ms-overflow-style: none;
scrollbar-width: none;*/
}
.card {
position: relative;
top: 0px;
width: 500px;
height: 290px;
margin-top: 4rem;
background-color: #121212;
border: 4px solid transparent;
border-radius: 1.4em;
background-clip: padding-box;
transition: 300ms;
}
/*Cards borders*/
.card::after {
position: absolute;
top: -0.05em;
bottom: -0.05em;
left: -0.05em;
right: -0.05em;
background: linear-gradient(135deg, #353be5 0%, #43434388 100%);
content: "";
z-index: -1;
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 2em 40px);
transition: 500ms;
}
.card:hover {
top: -1%;
}
.card:hover::after {
background: linear-gradient(135deg, #4000ff 0%, #353be570 100%);
filter: drop-shadow(#4f35e5a0 0 2em 40px);
top: -0.1em;
bottom: -0.1em;
left: -0.1em;
right: -0.1em;
}
.card-title {
position: absolute;
top: 12%;
left: 25%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 2em;
color: #eaeaea;
}
.card-desc {
position: absolute;
top: 50%;
left: 25%;
height: fit-content;
width: 65%;
font-family: "IBM Plex Mono";
font-size: 1.4em;
color: #eaeaea;
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 4em;
height: 4em;
}
/*-Logo----------------------------------------------------------*/
.logo {
position: fixed;
margin-top: 3vh;
margin-left: 3vh;
width: 3.7rem;
height: 3.7rem;
transition-duration: 500ms;
}
.logo:hover {
filter: drop-shadow(0 0 4px #7782ff);
-webkit-filter: drop-shadow(0 0 4px #7782ff);
transition: cubic-bezier(0.075, 0.82, 0.165, 1);
transition-duration: 500ms;
}

3
src/styles/global.css Normal file
View file

@ -0,0 +1,3 @@
/*-Fonts----------------------------------------------------------*/
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");

View file

@ -1,203 +0,0 @@
/*-Phone-Screen-----------------------------------------------------*/
@media (max-width: 800px) {
/*-Page----------------------------------------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
margin: 0;
padding: 0;
overflow-x: hidden;
}
body {
font-family: "Inter";
background-color: #000;
}
/*-Header--------------------------------------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: transparent;
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.logo {
display: none;
position: absolute;
top: 1.3rem;
left: 1.3rem;
z-index: 2;
width: 3rem;
height: 3rem;
margin: 0;
padding: 0;
/*display: block;*/
pointer-events: auto;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts---------------------------------------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards---------------------------------------------------------*/
.card-container {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 5.5rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
width: 100vw;
min-height: 0;
height: calc(100vh - 5.5rem);
margin: 0;
padding: 10rem 1rem 1rem 1rem;
gap: 1rem;
overflow-x: hidden;
overflow-y: auto;
box-sizing: border-box;
background: transparent;
}
.card {
position: relative;
width: 90vw;
max-width: 420px;
height: auto;
min-height: 14rem;
margin: 1rem 0;
padding: 1.2rem 1rem;
background-color: #121212;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: static;
width: 3em;
height: 3em;
margin-bottom: 0.8em;
margin-right: 0;
margin-top: 0.2em;
flex-shrink: 0;
display: block;
}
.card-title {
position: static;
margin-bottom: 0.5em;
margin-top: 0.2em;
margin-left: 0;
font-size: 1.7em;
font-weight: 600;
color: #eaeaea;
text-align: center;
text-decoration: none;
}
.card-desc {
position: static;
width: 100%;
margin-top: 1em;
margin-left: 0;
font-size: 1em;
color: #eaeaea;
text-align: center;
}
}

View file

@ -1,192 +0,0 @@
/*-Tablet-Screen-----------------------------------------------------*/
@media (max-width: 1210px) AND (min-width: 800px) {
/*-Page----------------------------------------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
height: auto;
margin: 0;
padding: 0;
overflow-x: hidden;
overflow-y: auto;
}
body {
font-family: "Inter";
background-color: #000;
background-size: cover;
background-attachment: fixed;
}
/*-Header--------------------------------------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: #00000090;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
/*mask: linear-gradient(black, black, transparent);*/
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.logo {
position: absolute;
top: 1.3rem;
left: 1.3rem;
z-index: 2;
width: 3rem;
height: 3rem;
margin: 0;
padding: 0;
display: block;
pointer-events: auto;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts---------------------------------------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards---------------------------------------------------------*/
.card-container {
position: relative;
left: 0;
right: 0;
bottom: 0;
top: 22rem;
min-height: 0;
height: calc(100vh - 5.5rem);
width: 80vw;
max-width: 1200px; /* Prevents from getting too wide */
margin: 0 auto; /* 'auto' centers it horizontally */
padding-bottom: 10%;
display: grid;
/* 2 equal columns ('1fr' means 1 fraction of available space) */
grid-template-columns: repeat(2, 1fr);
overflow: visible;
gap: 3rem;
}
.card {
position: relative;
width: 100%;
/*max-width: 300px;*/
height: auto;
min-height: 14rem;
margin: 0;
padding: 1.4rem;
background-color: #121212;
box-sizing: border-box;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 3em;
height: 3em;
}
.card-title {
position: absolute;
top: 12%;
left: 23%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 1.6em;
color: #eaeaea;
}
.card-desc {
position: static;
width: 100%;
margin-top: 5em;
margin-left: 0;
font-size: 1.2em;
color: #eaeaea;
text-align: center;
}
}