feat: Add peeking Bongo Cat Easter Egg with micro-animations
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 11s

This commit is contained in:
Kroonk
2026-05-21 17:41:28 +02:00
parent e9e589ddcc
commit 8946cbecf6
3 changed files with 224 additions and 2 deletions

114
style.css
View File

@@ -820,3 +820,117 @@ main {
animation-iteration-count: 1 !important;
}
}
/* ==========================================================================
Peeking Bongo Cat Easter Egg
========================================================================== */
.peeking-cat {
position: fixed;
bottom: -45px;
left: 24px;
width: 120px;
height: 100px;
z-index: 1000;
cursor: pointer;
transition: bottom 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275), transform 0.3s ease;
user-select: none;
pointer-events: auto;
}
.peeking-cat:hover {
bottom: -15px;
transform: scale(1.06);
}
.peeking-cat.is-active {
bottom: -15px;
}
/* Blinking eyes animation */
@keyframes cat-blink {
0%, 90%, 100% {
transform: scaleY(1);
}
95% {
transform: scaleY(0.1);
}
}
.cat-eye-group {
transform-origin: 42px 50px;
animation: cat-blink 4s infinite;
}
.cat-eye-group:nth-child(2) {
transform-origin: 78px 50px;
}
/* Ear wiggle animation on hover */
@keyframes ear-wiggle-l {
0%, 100% { transform: rotate(0deg); }
50% { transform: rotate(-6deg); }
}
@keyframes ear-wiggle-r {
0%, 100% { transform: rotate(0deg); }
50% { transform: rotate(6deg); }
}
.peeking-cat:hover .cat-ear-left,
.peeking-cat:hover .cat-ear-left-inner {
animation: ear-wiggle-l 0.4s ease-in-out infinite alternate;
transform-origin: 35px 42px;
}
.peeking-cat:hover .cat-ear-right,
.peeking-cat:hover .cat-ear-right-inner {
animation: ear-wiggle-r 0.4s ease-in-out infinite alternate;
transform-origin: 85px 42px;
}
/* Paw tapping animation (Bongo Cat typing style) */
@keyframes paw-tap-left {
0%, 100% { transform: translateY(0) rotate(0); }
50% { transform: translateY(-10px) rotate(-3deg); }
}
@keyframes paw-tap-right {
0%, 100% { transform: translateY(0) rotate(0); }
50% { transform: translateY(-10px) rotate(3deg); }
}
.peeking-cat.is-tapping .cat-paw-left {
animation: paw-tap-left 0.14s ease-in-out infinite alternate;
transform-origin: 38px 70px;
}
.peeking-cat.is-tapping .cat-paw-right {
animation: paw-tap-right 0.14s ease-in-out infinite alternate-reverse;
transform-origin: 82px 70px;
}
/* Floating Hearts on click */
.cat-heart {
position: fixed;
pointer-events: none;
z-index: 10001;
font-size: 20px;
animation: heart-float 0.8s cubic-bezier(0.1, 0.8, 0.3, 1) forwards;
}
@keyframes heart-float {
0% {
transform: translateY(0) scale(0.6) rotate(0deg);
opacity: 1;
}
100% {
transform: translateY(-80px) scale(1.4) rotate(var(--rot, 15deg));
opacity: 0;
}
}
/* Responsive adjustment for mobile screen */
@media (max-width: 620px) {
.peeking-cat {
width: 90px;
height: 75px;
bottom: -35px;
left: 12px;
}
.peeking-cat:hover,
.peeking-cat.is-active {
bottom: -10px;
}
}