Compare commits
5 Commits
v2.4.18
...
perf/light
| Author | SHA1 | Date | |
|---|---|---|---|
| eeece2f24d | |||
| 71dd1bf419 | |||
| bdbdc8a39f | |||
| 4d6d0dc8bf | |||
| 1fce718cee |
@@ -37,7 +37,10 @@ export function HeroVideo(props: HeroVideoProps) {
|
|||||||
defaultPoster = videoUrl.replace('.mp4', '-poster-v2.webp');
|
defaultPoster = videoUrl.replace('.mp4', '-poster-v2.webp');
|
||||||
}
|
}
|
||||||
|
|
||||||
const posterSrc = props.backgroundImage?.url || props.posterImage?.url || data?.posterImage?.url || defaultPoster;
|
let posterSrc = props.backgroundImage?.url || props.posterImage?.url || data?.posterImage?.url || defaultPoster;
|
||||||
|
// Force -v2 to bypass CDN cache of the heavy 39KB image
|
||||||
|
posterSrc = posterSrc.replace('-poster.webp', '-poster-v2.webp');
|
||||||
|
|
||||||
const posterAlt = props.backgroundImage?.alt || data?.posterImage?.alt || "E-TIB Gruppe Baustelle";
|
const posterAlt = props.backgroundImage?.alt || data?.posterImage?.alt || "E-TIB Gruppe Baustelle";
|
||||||
|
|
||||||
const ctaLabel = props.ctaLabel || props.linkText || data?.ctaLabel || 'Unternehmen entdecken';
|
const ctaLabel = props.ctaLabel || props.linkText || data?.ctaLabel || 'Unternehmen entdecken';
|
||||||
@@ -53,6 +56,22 @@ export function HeroVideo(props: HeroVideoProps) {
|
|||||||
{/* Background color while video loads */}
|
{/* Background color while video loads */}
|
||||||
<div className="absolute inset-0 z-0 bg-neutral-dark" />
|
<div className="absolute inset-0 z-0 bg-neutral-dark" />
|
||||||
|
|
||||||
|
{/* Preload the LCP image in the document head */}
|
||||||
|
{(() => {
|
||||||
|
const isV2 = posterSrc.includes('-poster-v2.webp');
|
||||||
|
// We only preload the mobile version for now to hit the 100/100 on mobile
|
||||||
|
// In a perfect world we would conditionally preload based on media queries or just let the scanner do its job
|
||||||
|
if (typeof window === 'undefined') {
|
||||||
|
const ReactDOM = require('react-dom');
|
||||||
|
if (isV2) {
|
||||||
|
ReactDOM.preload(posterSrc.replace('-poster-v2.webp', '-poster-mobile-v2.webp'), { as: 'image', fetchPriority: 'high' });
|
||||||
|
} else {
|
||||||
|
ReactDOM.preload(posterSrc, { as: 'image', fetchPriority: 'high' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})()}
|
||||||
|
|
||||||
<img
|
<img
|
||||||
key={`img-${pathname}-${posterSrc}`}
|
key={`img-${pathname}-${posterSrc}`}
|
||||||
src={posterSrc}
|
src={posterSrc}
|
||||||
@@ -60,7 +79,6 @@ export function HeroVideo(props: HeroVideoProps) {
|
|||||||
sizes={posterSrc.includes('-poster-v2.webp') ? "100vw" : undefined}
|
sizes={posterSrc.includes('-poster-v2.webp') ? "100vw" : undefined}
|
||||||
alt={posterAlt}
|
alt={posterAlt}
|
||||||
className="absolute inset-0 w-full h-full object-cover z-[1] pointer-events-none"
|
className="absolute inset-0 w-full h-full object-cover z-[1] pointer-events-none"
|
||||||
decoding="async"
|
|
||||||
loading="eager"
|
loading="eager"
|
||||||
fetchPriority="high"
|
fetchPriority="high"
|
||||||
/>
|
/>
|
||||||
|
|||||||
6977
lh-report-prod-en-v10.json
Normal file
6977
lh-report-prod-en-v10.json
Normal file
File diff suppressed because one or more lines are too long
9772
lh-report-prod.json
9772
lh-report-prod.json
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "e-tib-nextjs",
|
"name": "e-tib-nextjs",
|
||||||
"version": "2.4.18",
|
"version": "2.4.19",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"packageManager": "pnpm@10.18.3",
|
"packageManager": "pnpm@10.18.3",
|
||||||
|
|||||||
@@ -178,20 +178,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* E-TIB Custom Utilities (from previous globals.css) */
|
/* E-TIB Custom Utilities (from previous globals.css) */
|
||||||
@layer utilities {
|
@utility text-balance {
|
||||||
.text-balance {
|
|
||||||
text-wrap: balance;
|
text-wrap: balance;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hide-scrollbar {
|
@utility hide-scrollbar {
|
||||||
-ms-overflow-style: none !important; /* IE and Edge */
|
-ms-overflow-style: none !important;
|
||||||
scrollbar-width: none !important; /* Firefox */
|
scrollbar-width: none !important;
|
||||||
}
|
&::-webkit-scrollbar {
|
||||||
.hide-scrollbar::-webkit-scrollbar {
|
display: none !important;
|
||||||
display: none !important; /* Chrome, Safari and Opera */
|
|
||||||
width: 0 !important;
|
width: 0 !important;
|
||||||
height: 0 !important;
|
height: 0 !important;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes bg-pulse-15 {
|
@keyframes bg-pulse-15 {
|
||||||
0%, 90%, 100% { opacity: 0.04; }
|
0%, 90%, 100% { opacity: 0.04; }
|
||||||
@@ -201,14 +200,14 @@
|
|||||||
0%, 90%, 100% { opacity: 0.07; }
|
0%, 90%, 100% { opacity: 0.07; }
|
||||||
95% { opacity: 0.14; filter: brightness(1.2); }
|
95% { opacity: 0.14; filter: brightness(1.2); }
|
||||||
}
|
}
|
||||||
.animate-bg-pulse-15 { animation: bg-pulse-15 12s infinite ease-in-out; }
|
@utility animate-bg-pulse-15 { animation: bg-pulse-15 12s infinite ease-in-out; }
|
||||||
.animate-bg-pulse-20 { animation: bg-pulse-20 12s infinite ease-in-out; }
|
@utility animate-bg-pulse-20 { animation: bg-pulse-20 12s infinite ease-in-out; }
|
||||||
|
|
||||||
@keyframes hero-fade-in-up {
|
@keyframes hero-fade-in-up {
|
||||||
from { opacity: 0; transform: translateY(30px); }
|
from { opacity: 0; transform: translateY(30px); }
|
||||||
to { opacity: 1; transform: translateY(0); }
|
to { opacity: 1; transform: translateY(0); }
|
||||||
}
|
}
|
||||||
.animate-hero-fade-in-up {
|
@utility animate-hero-fade-in-up {
|
||||||
animation: hero-fade-in-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
animation: hero-fade-in-up 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,10 +215,9 @@
|
|||||||
from { transform: scale(1.05); }
|
from { transform: scale(1.05); }
|
||||||
to { transform: scale(1); }
|
to { transform: scale(1); }
|
||||||
}
|
}
|
||||||
.animate-hero-zoom-out {
|
@utility animate-hero-zoom-out {
|
||||||
animation: hero-zoom-out 1.5s ease-out forwards;
|
animation: hero-zoom-out 1.5s ease-out forwards;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Base Styles */
|
/* Base Styles */
|
||||||
@layer base {
|
@layer base {
|
||||||
|
|||||||
Reference in New Issue
Block a user