Retire l'animation vidéo derrière les stats du hero
L'utilisateur a jugé le rendu de la vidéo non satisfaisant. Retour à un bloc de statistiques simple, sans élément de fond animé. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fkg15RCxNgUys4ru73He2o
This commit is contained in:
5 files changed
+1
-51
No files matched your search
@@ -50,7 +50,6 @@ app.use(
|
|||||||
styleSrc: ["'self'", "'unsafe-inline'", 'https://fonts.googleapis.com'],
|
styleSrc: ["'self'", "'unsafe-inline'", 'https://fonts.googleapis.com'],
|
||||||
fontSrc: ['https://fonts.gstatic.com'],
|
fontSrc: ['https://fonts.gstatic.com'],
|
||||||
imgSrc: ["'self'", 'data:', 'blob:'],
|
imgSrc: ["'self'", 'data:', 'blob:'],
|
||||||
mediaSrc: ["'self'"],
|
|
||||||
connectSrc: ["'self'"],
|
connectSrc: ["'self'"],
|
||||||
frameSrc: ["'self'", 'https://www.google.com', 'https://maps.google.com'],
|
frameSrc: ["'self'", 'https://www.google.com', 'https://maps.google.com'],
|
||||||
frameAncestors: ["'none'"],
|
frameAncestors: ["'none'"],
|
||||||
|
|||||||
Binary file not shown.
@@ -1,24 +0,0 @@
|
|||||||
// 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 (
|
|
||||||
<video
|
|
||||||
className={`hero-stats-video ${className}`.trim()}
|
|
||||||
src="/assets/hero-player.mp4"
|
|
||||||
autoPlay={!reduceMotion}
|
|
||||||
loop={!reduceMotion}
|
|
||||||
muted
|
|
||||||
playsInline
|
|
||||||
preload="auto"
|
|
||||||
aria-hidden="true"
|
|
||||||
tabIndex={-1}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,6 @@ import Modal from '../components/Modal.jsx';
|
|||||||
import PastEventCard from '../components/PastEventCard.jsx';
|
import PastEventCard from '../components/PastEventCard.jsx';
|
||||||
import { AdhesionForm, AdhesionModal } from '../components/AdhesionForm.jsx';
|
import { AdhesionForm, AdhesionModal } from '../components/AdhesionForm.jsx';
|
||||||
import { associationSettings } from '../lib/siteSettings.js';
|
import { associationSettings } from '../lib/siteSettings.js';
|
||||||
import HeroPlayerVideo from '../components/HeroPlayerVideo.jsx';
|
|
||||||
|
|
||||||
export function InscriptionModal({ rencontre, onClose, onDone }) {
|
export function InscriptionModal({ rencontre, onClose, onDone }) {
|
||||||
const { user, login } = useAuth();
|
const { user, login } = useAuth();
|
||||||
@@ -266,9 +265,7 @@ export default function Home() {
|
|||||||
<button className="btn btn-outline">Découvrir l'association</button>
|
<button className="btn btn-outline">Découvrir l'association</button>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
<div className="hero-stats-wrap" style={{ position: 'relative', marginTop: 54, paddingTop: 34, borderTop: '1px solid var(--border)' }}>
|
<div style={{ display: 'flex', gap: 42, marginTop: 54, paddingTop: 34, borderTop: '1px solid var(--border)' }}>
|
||||||
<HeroPlayerVideo />
|
|
||||||
<div style={{ display: 'flex', gap: 42, position: 'relative', zIndex: 1 }}>
|
|
||||||
{[[String(members.length), 'entreprises membres'], [String(passees.length), 'rencontres organisées'], ['30 ans', 'de partenariat']].map(([n, l]) => (
|
{[[String(members.length), 'entreprises membres'], [String(passees.length), 'rencontres organisées'], ['30 ans', 'de partenariat']].map(([n, l]) => (
|
||||||
<div key={l}>
|
<div key={l}>
|
||||||
<div className="serif" style={{ fontSize: 34, fontWeight: 600 }}>{n}</div>
|
<div className="serif" style={{ fontSize: 34, fontWeight: 600 }}>{n}</div>
|
||||||
@@ -277,7 +274,6 @@ export default function Home() {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div style={{ position: 'relative' }}>
|
<div style={{ position: 'relative' }}>
|
||||||
<div className={content.hero_photo ? '' : 'placeholder-pattern'} style={{ aspectRatio: '4/5', borderRadius: 4, overflow: 'hidden', boxShadow: '0 30px 60px -30px rgba(27,27,27,.4)', display: 'flex', alignItems: 'flex-end', padding: content.hero_photo ? 0 : 22 }}>
|
<div className={content.hero_photo ? '' : 'placeholder-pattern'} style={{ aspectRatio: '4/5', borderRadius: 4, overflow: 'hidden', boxShadow: '0 30px 60px -30px rgba(27,27,27,.4)', display: 'flex', alignItems: 'flex-end', padding: content.hero_photo ? 0 : 22 }}>
|
||||||
{content.hero_photo ? (
|
{content.hero_photo ? (
|
||||||
|
|||||||
@@ -43,25 +43,6 @@ input:focus, textarea:focus, select:focus { outline: none; border-color: var(--r
|
|||||||
.marquee-fade { width: 40px; }
|
.marquee-fade { width: 40px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hero stats background: a real video of a basketball player dribbling,
|
|
||||||
behind the "entreprises membres / rencontres organisées / X ans" row.
|
|
||||||
Pexels stock footage (free commercial license, no attribution required,
|
|
||||||
anonymous player), desaturated at runtime via CSS. */
|
|
||||||
.hero-stats-wrap { overflow: visible; }
|
|
||||||
.hero-stats-video {
|
|
||||||
position: absolute; right: -20px; bottom: -34px;
|
|
||||||
width: 420px; height: 130px;
|
|
||||||
object-fit: cover; object-position: 60% 35%;
|
|
||||||
pointer-events: none;
|
|
||||||
filter: grayscale(1) contrast(1.05) brightness(1.05);
|
|
||||||
opacity: .22;
|
|
||||||
/* Fades the video out over the stat text (left) and lets it show only
|
|
||||||
over the clear whitespace (right), so it never degrades the existing
|
|
||||||
text contrast. */
|
|
||||||
mask-image: linear-gradient(100deg, transparent 0%, transparent 26%, black 52%, black 100%);
|
|
||||||
-webkit-mask-image: linear-gradient(100deg, transparent 0%, transparent 26%, black 52%, black 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.container { max-width: 1180px; margin: 0 auto; padding-left: 32px; padding-right: 32px; }
|
.container { max-width: 1180px; margin: 0 auto; padding-left: 32px; padding-right: 32px; }
|
||||||
.serif { font-family: var(--serif); }
|
.serif { font-family: var(--serif); }
|
||||||
|
|
||||||
@@ -267,7 +248,6 @@ input:focus, textarea:focus, select:focus { outline: none; border-color: var(--r
|
|||||||
@media (max-width: 960px) {
|
@media (max-width: 960px) {
|
||||||
.grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr !important; }
|
.grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr !important; }
|
||||||
.hero-grid { grid-template-columns: 1fr !important; }
|
.hero-grid { grid-template-columns: 1fr !important; }
|
||||||
.hero-stats-video { width: 260px; height: 100px; right: -10px; bottom: -10px; }
|
|
||||||
}
|
}
|
||||||
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
|
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
|
||||||
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
|
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
|
||||||
@@ -294,7 +274,6 @@ input:focus, textarea:focus, select:focus { outline: none; border-color: var(--r
|
|||||||
|
|
||||||
@media (max-width: 640px) {
|
@media (max-width: 640px) {
|
||||||
.container { padding-left: 20px; padding-right: 20px; }
|
.container { padding-left: 20px; padding-right: 20px; }
|
||||||
.hero-stats-video { display: none; }
|
|
||||||
.admin-nav { grid-template-columns: 1fr; gap: 20px; }
|
.admin-nav { grid-template-columns: 1fr; gap: 20px; }
|
||||||
.admin-sidebar-footer { align-items: stretch; flex-direction: column; }
|
.admin-sidebar-footer { align-items: stretch; flex-direction: column; }
|
||||||
.admin-sidebar-action { width: 100%; }
|
.admin-sidebar-action { width: 100%; }
|
||||||
|
|||||||
Reference in new issue
Block a user