diff --git a/server/src/index.js b/server/src/index.js index f45d9b6..a09caa3 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -50,6 +50,7 @@ app.use( styleSrc: ["'self'", "'unsafe-inline'", 'https://fonts.googleapis.com'], fontSrc: ['https://fonts.gstatic.com'], imgSrc: ["'self'", 'data:', 'blob:'], + mediaSrc: ["'self'"], connectSrc: ["'self'"], frameSrc: ["'self'", 'https://www.google.com', 'https://maps.google.com'], frameAncestors: ["'none'"], diff --git a/web/public/assets/hero-player.mp4 b/web/public/assets/hero-player.mp4 new file mode 100644 index 0000000..8bff239 Binary files /dev/null and b/web/public/assets/hero-player.mp4 differ diff --git a/web/src/components/HeroPlayerSilhouette.jsx b/web/src/components/HeroPlayerSilhouette.jsx deleted file mode 100644 index 6ada6f6..0000000 --- a/web/src/components/HeroPlayerSilhouette.jsx +++ /dev/null @@ -1,60 +0,0 @@ -// Purely decorative basketball-player silhouette animated behind the hero -// stats row. An original flat-illustration silhouette (not a photo/video), -// built from rounded-capsule limb segments — the same construction as -// classic flat sports pictograms (NBA/Jordan-style marks) — in a duotone -// matching the site theme. Avoids any droit-à-l'image concern since it -// does not depict a real identifiable person. -export default function HeroPlayerSilhouette({ className = '' }) { - return ( - - ); -} diff --git a/web/src/components/HeroPlayerVideo.jsx b/web/src/components/HeroPlayerVideo.jsx new file mode 100644 index 0000000..0da7220 --- /dev/null +++ b/web/src/components/HeroPlayerVideo.jsx @@ -0,0 +1,24 @@ +// Purely decorative real video of a basketball player dribbling, animated +// behind the hero stats row. Desaturated to black & white at runtime via +// CSS (no source video processing available in this environment). Source: +// Pexels stock footage (free commercial license, no attribution required, +// anonymous player) — see web/public/assets/hero-player.mp4. +export default function HeroPlayerVideo({ className = '' }) { + const reduceMotion = + typeof window !== 'undefined' && + window.matchMedia('(prefers-reduced-motion: reduce)').matches; + + return ( +