ritual.sh/assets/sass/partials/_lavalamp.scss
2025-12-11 11:58:40 +00:00

267 lines
5.8 KiB
SCSS

.lava-lamp-container {
width: 80px;
height: 150px;
display: flex;
flex-direction: column;
align-items: center;
z-index: 999;
position: relative;
margin: 0 auto;
.nav-lamp & {
top: -20px;
@include media-down(lg) {
top: auto;
}
}
&::before {
content: "";
position: absolute;
top: 10%;
width: 150%;
height: 80%;
background: conic-gradient(
from 0deg,
rgba(255, 100, 0, 0.8) 0deg,
transparent 5deg,
transparent 10deg,
rgba(255, 150, 0, 0.6) 15deg,
transparent 20deg,
transparent 25deg,
rgba(255, 200, 0, 0.7) 30deg,
transparent 35deg,
transparent 40deg,
rgba(255, 100, 0, 0.8) 45deg,
transparent 50deg,
transparent 55deg,
rgba(255, 150, 0, 0.6) 60deg,
transparent 65deg,
transparent 70deg,
rgba(255, 200, 0, 0.7) 75deg,
transparent 80deg,
transparent 85deg,
rgba(255, 100, 0, 0.8) 90deg,
transparent 95deg,
transparent 100deg,
rgba(255, 150, 0, 0.6) 105deg,
transparent 110deg,
transparent 115deg,
rgba(255, 200, 0, 0.7) 120deg,
transparent 125deg,
transparent 130deg,
rgba(255, 100, 0, 0.8) 135deg,
transparent 140deg,
transparent 145deg,
rgba(255, 150, 0, 0.6) 150deg,
transparent 155deg,
transparent 160deg,
rgba(255, 200, 0, 0.7) 165deg,
transparent 170deg,
transparent 175deg,
rgba(255, 100, 0, 0.8) 180deg,
transparent 185deg,
transparent 190deg,
rgba(255, 150, 0, 0.6) 195deg,
transparent 200deg,
transparent 205deg,
rgba(255, 200, 0, 0.7) 210deg,
transparent 215deg,
transparent 220deg,
rgba(255, 100, 0, 0.8) 225deg,
transparent 230deg,
transparent 235deg,
rgba(255, 150, 0, 0.6) 240deg,
transparent 245deg,
transparent 250deg,
rgba(255, 200, 0, 0.7) 255deg,
transparent 260deg,
transparent 265deg,
rgba(255, 100, 0, 0.8) 270deg,
transparent 275deg,
transparent 280deg,
rgba(255, 150, 0, 0.6) 285deg,
transparent 290deg,
transparent 295deg,
rgba(255, 200, 0, 0.7) 300deg,
transparent 305deg,
transparent 310deg,
rgba(255, 100, 0, 0.8) 315deg,
transparent 320deg,
transparent 325deg,
rgba(255, 150, 0, 0.6) 330deg,
transparent 335deg,
transparent 340deg,
rgba(255, 200, 0, 0.7) 345deg,
transparent 350deg,
transparent 355deg,
rgba(255, 100, 0, 0.8) 360deg
);
border-radius: 50%;
opacity: 0;
filter: blur(12px);
pointer-events: none;
transition:
opacity 0.4s ease,
transform 0.4s ease;
z-index: -1;
}
&:hover::before {
opacity: 1;
animation: rotate-beams 7s linear infinite;
}
}
@keyframes rotate-beams {
0% {
transform: rotate(0deg) scale(1);
}
50% {
transform: rotate(180deg) scale(1.2);
}
100% {
transform: rotate(360deg) scale(1);
}
}
.lamp-cap {
width: 60%;
height: 10%;
background: linear-gradient(180deg, #c0c0c0 0%, #888 50%, #666 100%);
border-radius: 60px 60px 0 0;
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.5),
inset 0 2px 4px rgba(255, 255, 255, 0.3);
position: relative;
z-index: 10;
}
.lava-lamp {
position: relative;
width: 100%;
height: 110%;
background: var(--lamp-bg, linear-gradient(180deg, #2a1a4a 0%, #1a0a3a 100%));
clip-path: polygon(20% 0, 80% 0, 100% 100%, 0% 100%);
overflow: hidden;
box-shadow:
inset 0 0 60px rgba(0, 0, 0, 0.3),
inset -10px 0 40px rgba(255, 255, 255, 0.1),
inset 10px 0 40px rgba(0, 0, 0, 0.2);
filter: drop-shadow(0 10px 30px rgba(0, 0, 0, 0.5));
}
.lava-lamp::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
90deg,
transparent 0%,
rgba(255, 255, 255, 0.15) 20%,
rgba(255, 255, 255, 0.05) 40%,
transparent 60%
);
pointer-events: none;
}
.blobs-container {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
filter: url(#goo);
pointer-events: none;
z-index: 2;
}
.blob {
position: absolute;
border-radius: 50%;
background: #f74b1e;
animation: float var(--duration) ease-in-out infinite;
opacity: 0.95;
mix-blend-mode: normal;
z-index: 3;
}
.lamp-base {
width: 100%;
height: 20%;
background: linear-gradient(180deg, #888 0%, #555 40%, #333 100%);
border-radius: 0 0 40px 40px / 0 0 60px 60px;
box-shadow:
0 10px 30px rgba(0, 0, 0, 0.6),
inset 0 5px 10px rgba(255, 255, 255, 0.2),
inset 0 -5px 10px rgba(0, 0, 0, 0.5);
position: relative;
display: flex;
justify-content: center;
align-items: center;
border-top: 1px solid #924706;
}
@keyframes float {
0%,
100% {
transform: translate(var(--start-x), var(--start-y)) scale(1);
}
25% {
transform: translate(var(--mid1-x), var(--mid1-y)) scale(var(--scale1, 1.1));
}
50% {
transform: translate(var(--mid2-x), var(--mid2-y)) scale(var(--scale2, 0.9));
}
75% {
transform: translate(var(--mid3-x), var(--mid3-y))
scale(var(--scale3, 1.05));
}
}
.lamp-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-35%, -50%) rotate(85deg);
font-size: 30px;
font-weight: bold;
color: rgba(224, 27, 36, 0.7);
transition: color 0.5s ease;
pointer-events: none;
z-index: 4;
letter-spacing: 2px;
}
.lamp-text-shadow {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-35%, -50%) rotate(85deg);
font-size: 30px;
font-weight: bold;
color: rgba(224, 27, 36, 0);
transition: color 0.5s ease;
pointer-events: none;
z-index: 4;
letter-spacing: 2px;
@include media-down(lg) {
color: rgba(224, 27, 36, 0.2);
}
}
.lava-lamp:hover .lamp-text-shadow {
color: rgba(224, 27, 36, 0.7);
}
.lava-lamp:hover {
cursor: pointer;
> .lamp-text {
z-index: 4;
}
}