release: promote beta to main (gyms, brand colours, JPEG XL, SEO per gym) #3

Merged
andre merged 74 commits from beta into main 2026-10-26 19:47:48 +00:00
Showing only changes of commit db28427c1e - Show all commits
+13 -19
View File
@@ -450,12 +450,12 @@ section[id] {
.gym-switch-btn:hover::after, .gym-switch-btn:hover::after,
.gym-switch-btn:focus-visible::after { transform: scaleX(1); transition: transform 250ms cubic-bezier(.3, .7, .4, 1.5); } .gym-switch-btn:focus-visible::after { transform: scaleX(1); transition: transform 250ms cubic-bezier(.3, .7, .4, 1.5); }
/* Neon flicker: a stuttering switch-on while it lifts, then steady with the /* Neon blink: after a moment of hovering, one short stutter — like a tube
odd short glitch, like a tube that isn't quite seated. Opacity + filter only. */ that isn't quite seated — then steady again. Opacity + filter only. */
.site-btn:hover, .site-btn:hover,
.site-btn:focus-visible, .site-btn:focus-visible,
.gym-switch-btn:hover, .gym-switch-btn:hover,
.gym-switch-btn:focus-visible { animation: neon-flicker-glow 5s linear 150ms infinite; } .gym-switch-btn:focus-visible { animation: neon-flicker-glow 600ms linear 1.4s 1; }
.site-btn:hover::before, .site-btn:hover::before,
.site-btn:hover::after, .site-btn:hover::after,
.site-btn:focus-visible::before, .site-btn:focus-visible::before,
@@ -463,7 +463,7 @@ section[id] {
.gym-switch-btn:hover::before, .gym-switch-btn:hover::before,
.gym-switch-btn:hover::after, .gym-switch-btn:hover::after,
.gym-switch-btn:focus-visible::before, .gym-switch-btn:focus-visible::before,
.gym-switch-btn:focus-visible::after { animation: neon-flicker-tube 5s linear 150ms infinite; } .gym-switch-btn:focus-visible::after { animation: neon-flicker-tube 600ms linear 1.4s 1; }
.site-btn:active, .site-btn:active,
.gym-switch-btn:active { .gym-switch-btn:active {
@@ -477,23 +477,17 @@ section[id] {
} }
@keyframes neon-flicker-tube { @keyframes neon-flicker-tube {
0%, 4%, 8%, 12%, 100% { opacity: 1; } 0%, 100% { opacity: 1; }
2% { opacity: .35; } 15% { opacity: .3; }
6% { opacity: .65; } 30% { opacity: 1; }
10% { opacity: .4; } 50% { opacity: .55; }
70% { opacity: 1; } 65% { opacity: 1; }
71% { opacity: .5; }
72% { opacity: 1; }
73% { opacity: .6; }
74% { opacity: 1; }
} }
@keyframes neon-flicker-glow { @keyframes neon-flicker-glow {
0%, 4%, 8%, 12%, 100% { filter: drop-shadow(0 0 5px rgba(var(--fitme-accent-rgb), .9)) drop-shadow(0 0 14px rgba(var(--fitme-accent-rgb), .55)); } 0%, 100% { filter: drop-shadow(0 0 5px rgba(var(--fitme-accent-rgb), .9)) drop-shadow(0 0 14px rgba(var(--fitme-accent-rgb), .55)); }
2% { filter: drop-shadow(0 0 1px rgba(var(--fitme-accent-rgb), .3)); } 15% { filter: drop-shadow(0 0 1px rgba(var(--fitme-accent-rgb), .3)); }
6% { filter: drop-shadow(0 0 3px rgba(var(--fitme-accent-rgb), .5)); } 30% { filter: drop-shadow(0 0 5px rgba(var(--fitme-accent-rgb), .9)) drop-shadow(0 0 14px rgba(var(--fitme-accent-rgb), .55)); }
10% { filter: drop-shadow(0 0 2px rgba(var(--fitme-accent-rgb), .35)); } 50% { filter: drop-shadow(0 0 2px rgba(var(--fitme-accent-rgb), .45)); }
71% { filter: drop-shadow(0 0 2px rgba(var(--fitme-accent-rgb), .4)); }
73% { filter: drop-shadow(0 0 3px rgba(var(--fitme-accent-rgb), .5)); }
} }
/* Hover: white text on an almost-black face keeping ~10% of the brand colour — /* Hover: white text on an almost-black face keeping ~10% of the brand colour —