Files
Jellyfin-Seasonals-Plugin/Jellyfin.Plugin.Seasonals/Web/underwater.css

133 lines
3.1 KiB
CSS

.underwater-container {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
z-index: 9999;
overflow: hidden;
contain: strict;
}
.underwater-bg {
position: absolute;
top: 0; left: 0; width: 100vw; height: 100vh;
background: linear-gradient(180deg, rgba(0, 105, 148, 0.1) 0%, rgba(0, 48, 143, 0.4) 100%);
pointer-events: none;
z-index: 10;
}
.underwater-symbol {
position: absolute;
animation-timing-function: linear;
animation-iteration-count: infinite;
font-size: 3rem;
opacity: 0.9;
z-index: 20;
}
.underwater-symbol img {
width: 6vh;
height: auto;
max-width: 60px;
object-fit: contain;
}
.underwater-seaweed {
will-change: transform, opacity;
position: absolute;
bottom: -1vh;
font-size: 4rem;
transform-origin: bottom center;
animation: underwater-sway 4s ease-in-out infinite alternate;
z-index: 30;
opacity: 0.8;
}
.underwater-seaweed img {
height: 12vh;
width: auto;
object-fit: contain;
max-height: 120px;
}
.underwater-bubble {
will-change: transform;
position: absolute;
bottom: -5vh;
border-radius: 50%;
border: 1px solid rgba(255, 255, 255, 0.4);
background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.1));
box-shadow: inset 0 0 5px rgba(255, 255, 255, 0.5);
animation: underwater-bubble-rise linear infinite;
z-index: 40;
}
@keyframes underwater-traverse-right {
0% { left: -25vw; }
100% { left: 125vw; }
}
@keyframes underwater-traverse-left {
0% { left: 125vw; }
100% { left: -25vw; }
}
@keyframes underwater-traverse-up {
0% { top: 0; translate: 0 120vh; }
100% { top: 0; translate: 0 -20vh; }
}
@keyframes underwater-traverse-down {
0% { top: 0; translate: 0 -20vh; }
100% { top: 0; translate: 0 120vh; }
}
@keyframes underwater-sway-y {
0% { transform: translateY(-2vh); }
100% { transform: translateY(2vh); }
}
@keyframes underwater-sway {
0% { transform: rotate(-10deg); }
100% { transform: rotate(10deg); }
}
@keyframes underwater-bubble-rise {
0% { transform: translateY(0) translateX(0); opacity: 0; }
10% { opacity: 0.7; }
50% { transform: translateY(-55vh) translateX(-20px); }
90% { opacity: 0; }
100% { transform: translateY(-110vh) translateX(10px); opacity: 0; }
}
.underwater-god-rays {
will-change: transform;
position: absolute;
top: 0;
left: -50vw;
width: 200vw;
height: 200vh;
background: repeating-linear-gradient(
15deg,
rgba(255, 255, 255, 0.02) 0px,
rgba(255, 255, 255, 0.05) 100px,
transparent 100px,
transparent 300px
);
animation: god-rays-sway 20s ease-in-out infinite alternate;
pointer-events: none;
z-index: 12;
transform-origin: top center;
mix-blend-mode: overlay;
filter: blur(5px);
translate: 0 -50vh;
}
@keyframes god-rays-sway {
0% { transform: rotate(-3deg) translateX(-5%); opacity: 0.4; }
50% { opacity: 0.8; }
100% { transform: rotate(3deg) translateX(5%); opacity: 0.4; }
}