mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
5.0 KiB
232 lines
5.0 KiB
:host {
|
|
--borderRadius: 1rem;
|
|
--borderWidth: 2px;
|
|
--hover3dSpotlightOpacity: 0.2;
|
|
|
|
display: block;
|
|
max-width: 25rem;
|
|
padding-top: calc(1 * var(--borderWidth));
|
|
width: 100%;
|
|
|
|
.card-wrapper {
|
|
&.hover-3d {
|
|
perspective: 1000px;
|
|
}
|
|
|
|
.card-container {
|
|
border-radius: var(--borderRadius);
|
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
|
|
|
.card-item {
|
|
aspect-ratio: 1.586;
|
|
background-color: #1d2124;
|
|
border-radius: calc(var(--borderRadius) - var(--borderWidth));
|
|
color: rgba(var(--light-primary-text));
|
|
line-height: 1.2;
|
|
|
|
button {
|
|
color: rgba(var(--light-primary-text));
|
|
height: 1.5rem;
|
|
z-index: 3;
|
|
}
|
|
|
|
.heading {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.value {
|
|
font-size: 18px;
|
|
}
|
|
}
|
|
|
|
&:not(.premium) {
|
|
&::after {
|
|
opacity: 0;
|
|
}
|
|
|
|
.card-item {
|
|
background-color: #ffffff;
|
|
color: rgba(var(--dark-primary-text));
|
|
}
|
|
}
|
|
}
|
|
|
|
&.hover-3d {
|
|
--hover3d-rotate-x: 0;
|
|
--hover3d-rotate-y: 0;
|
|
--hover3d-shine: 100% 100%;
|
|
|
|
.card-container {
|
|
overflow: hidden;
|
|
position: relative;
|
|
scale: 1;
|
|
transform: rotate3d(
|
|
var(--hover3d-rotate-x),
|
|
var(--hover3d-rotate-y),
|
|
0,
|
|
10deg
|
|
);
|
|
transform-style: preserve-3d;
|
|
transition:
|
|
box-shadow 400ms ease-out,
|
|
scale 500ms ease-out,
|
|
transform 500ms ease-out;
|
|
will-change: transform, scale;
|
|
|
|
&::before {
|
|
background-image: radial-gradient(
|
|
circle at 50%,
|
|
rgba(255, 255, 255, var(--hover3dSpotlightOpacity)) 10%,
|
|
transparent 50%
|
|
);
|
|
content: '';
|
|
filter: blur(0.75rem);
|
|
height: 33.333%;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
position: absolute;
|
|
scale: 500%;
|
|
translate: var(--hover3d-shine);
|
|
transition:
|
|
opacity 400ms ease-out,
|
|
translate 400ms ease-out;
|
|
width: 33.333%;
|
|
z-index: 1;
|
|
}
|
|
|
|
.card-item {
|
|
position: relative;
|
|
|
|
.hover-zone {
|
|
height: 33.333%;
|
|
width: 33.333%;
|
|
z-index: 2;
|
|
|
|
&:nth-child(1) {
|
|
left: 0;
|
|
top: 0;
|
|
}
|
|
|
|
&:nth-child(2) {
|
|
left: 33.333%;
|
|
top: 0;
|
|
}
|
|
|
|
&:nth-child(3) {
|
|
right: 0;
|
|
top: 0;
|
|
}
|
|
|
|
&:nth-child(4) {
|
|
left: 0;
|
|
top: 33.333%;
|
|
}
|
|
|
|
&:nth-child(5) {
|
|
left: 33.333%;
|
|
top: 33.333%;
|
|
}
|
|
|
|
&:nth-child(6) {
|
|
right: 0;
|
|
top: 33.333%;
|
|
}
|
|
|
|
&:nth-child(7) {
|
|
bottom: 0;
|
|
left: 0;
|
|
}
|
|
|
|
&:nth-child(8) {
|
|
bottom: 0;
|
|
left: 33.333%;
|
|
}
|
|
|
|
&:nth-child(9) {
|
|
bottom: 0;
|
|
right: 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
&:has(.hover-zone:hover) .card-container {
|
|
box-shadow: 0 18px 40px rgba(15, 23, 42, 0.3);
|
|
scale: 1.05;
|
|
|
|
&::before {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(1):hover) {
|
|
--hover3d-rotate-x: 1;
|
|
--hover3d-rotate-y: -1;
|
|
--hover3d-shine: 0% 0%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(2):hover) {
|
|
--hover3d-rotate-x: 1;
|
|
--hover3d-rotate-y: 0;
|
|
--hover3d-shine: 100% 0%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(3):hover) {
|
|
--hover3d-rotate-x: 1;
|
|
--hover3d-rotate-y: 1;
|
|
--hover3d-shine: 200% 0%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(4):hover) {
|
|
--hover3d-rotate-x: 0;
|
|
--hover3d-rotate-y: -1;
|
|
--hover3d-shine: 0% 100%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(5):hover) {
|
|
--hover3d-rotate-x: 0;
|
|
--hover3d-rotate-y: 0;
|
|
--hover3d-shine: 100% 100%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(6):hover) {
|
|
--hover3d-rotate-x: 0;
|
|
--hover3d-rotate-y: 1;
|
|
--hover3d-shine: 200% 100%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(7):hover) {
|
|
--hover3d-rotate-x: -1;
|
|
--hover3d-rotate-y: -1;
|
|
--hover3d-shine: 0% 200%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(8):hover) {
|
|
--hover3d-rotate-x: -1;
|
|
--hover3d-rotate-y: 0;
|
|
--hover3d-shine: 100% 200%;
|
|
}
|
|
|
|
&:has(.hover-zone:nth-child(9):hover) {
|
|
--hover3d-rotate-x: -1;
|
|
--hover3d-rotate-y: 1;
|
|
--hover3d-shine: 200% 200%;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.card-wrapper.hover-3d {
|
|
.card-container {
|
|
scale: 1 !important;
|
|
transform: none !important;
|
|
transition: none !important;
|
|
|
|
&::before {
|
|
opacity: 0 !important;
|
|
transition: none !important;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|