update img partenaire et team

This commit is contained in:
KIRITO_KMA 2026-04-08 00:57:37 +02:00
parent f17ca2527c
commit ed395b9fb7
11 changed files with 61 additions and 51 deletions

View file

@ -236,6 +236,6 @@ Pour contribuer au projet:
Consulter [pages/mentions-legales.html](pages/mentions-legales.html) et [pages/cgv.html](pages/cgv.html). Consulter [pages/mentions-legales.html](pages/mentions-legales.html) et [pages/cgv.html](pages/cgv.html).
--- ---
**Version du site web**: 1.5.2.16 **Version du site web**: 1.5.2.17
**Dernière mise à jour**: Avril 2026 **Dernière mise à jour**: Avril 2026
**Mainteneur**: KIRITO_KMA / L'équipe OmégaKube **Mainteneur**: KIRITO_KMA / L'équipe OmégaKube

View file

@ -3783,24 +3783,19 @@ footer {
font-weight: 500; font-weight: 500;
} }
/* Partner modal — réutilise team-modal, surcharge avatar */ /* Partner modal — utilise exactement la même structure que team-modal */
.partner-modal-avatar {
background: none !important;
border: none !important;
}
.team-modal-avatar-photo { .team-modal-avatar-photo {
width: 72px; width: 100%;
height: 72px; height: 100%;
border-radius: 10px; object-fit: cover;
object-fit: contain;
display: block; display: block;
/* Remplit l'octogone — clip-path du parent gère la forme */
} }
.team-modal-avatar-fallback { .team-modal-avatar-fallback {
width: 72px; width: 100%;
height: 72px; height: 100%;
border-radius: 10px;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-family: 'OmegaLarge', sans-serif; font-family: 'OmegaLarge', sans-serif;
@ -3817,8 +3812,8 @@ footer {
width: 100%; width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
border-radius: 50%;
display: block; display: block;
/* Pas de border-radius — le clip-path octogone du parent s'applique */
} }
.team-avatar-fallback { .team-avatar-fallback {
@ -3838,8 +3833,7 @@ footer {
justify-content: center; justify-content: center;
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 50%; /* overflow géré par clip-path du parent — pas de border-radius */
overflow: hidden;
} }
/* Modal avatar photo */ /* Modal avatar photo */

View file

@ -1,15 +1,13 @@
[ [
{ {
"name": "victorias-vice", "name": "victorias-vice",
"displayName": "Victoria's Vice 2", "displayName": "Victoria's Vice",
"description": "Serveur RP whitelist Fortnite sur thème italien. L'une de nos collaborations les plus abouties.", "description": "Serveur RP whitelist Fortnite sur thème italien. L'une de nos collaborations les plus abouties.",
"longDesc": "Victoria's Vice est un serveur RP whitelist Fortnite immersif basé sur une esthétique italienne unique. OmégaKube a développé l'intégralité de la map UEFN, le bot RP Vicy et l'identité visuelle du projet.", "longDesc": "Victoria's Vice est un serveur RP whitelist Fortnite immersif basé sur une esthétique italienne unique. OmégaKube a développé l'intégralité de la map UEFN, le bot RP Vicy et l'identité visuelle du projet.",
"gradient": "linear-gradient(135deg, #5E2040, #8b3a62)", "gradient": "linear-gradient(135deg, #5E2040, #8b3a62)",
"since": "2025", "since": "2025",
"services": [ "services": [
"Map UEFN", "Sessions RP Victoria's Vice 2"
"Bot Discord",
"Branding"
], ],
"stats": [ "stats": [
{ {
@ -35,43 +33,45 @@
"youtube": "https://www.youtube.com/@VictoriasVice", "youtube": "https://www.youtube.com/@VictoriasVice",
"tiktok": "", "tiktok": "",
"website": "#" "website": "#"
} },
"logo": "assets/images/partners/victorias-vice.png"
}, },
{ {
"name": "red-dust-redemption", "name": "red-dust-redemption",
"displayName": "Red Dust Redemption", "displayName": "Red Dust Redemption",
"description": "Serveur RP whitelist sur le thème far-west.", "description": "Plongez au cœur du Far West en 1884, dans l’Ouest des États-Unis où chaque choix compte.",
"longDesc": "Serveur RP whitelist sur le thème du far-west.", "longDesc": "Bienvenue sur Red Dust Redemption RP WL.Plongez au cœur du Far West en 1884, dans l’Ouest des États-Unis où chaque choix compte. Une multitude de possibilités s'offrent à vous. Piano en fond, ambiance chaleureuse et rencontres garanties, c'est l’endroit idéal pour ceux qui aiment la convivialité. Et si le danger vous attire, sachez que plusieurs organisations criminelles n’attendent que vous. Si l’aventure vous tente, n’attendez plus et foncez-nous rejoindre dès maintenant.",
"gradient": "linear-gradient(135deg, var(--accent-primary), var(--accent-secondary))", "gradient": "linear-gradient(135deg, var(--accent-primary), var(--accent-secondary))",
"since": "2025", "since": "2025",
"services": [ "services": [
"Sessions RP Red Dust Redemption" "Sessions RP Red Dust Redemption 2"
], ],
"stats": [ "stats": [
{ {
"icon": "star", "icon": "users",
"value": "?", "value": "40",
"label": "Stat 1" "label": "Joueurs max"
}, },
{ {
"icon": "zap", "icon": "home",
"value": "?", "value": "+6",
"label": "Stat 2" "label": "Paysages uniques"
}, },
{ {
"icon": "heart", "icon": "play",
"value": "?", "value": "+50",
"label": "Stat 3" "label": "Sessions"
} }
], ],
"social": { "social": {
"discord": "#", "discord": "https://discord.gg/FUamNpf7hq",
"twitter": "", "twitter": "",
"instagram": "", "instagram": "",
"youtube": "", "youtube": "",
"tiktok": "", "tiktok": "",
"website": "#" "website": "#"
} },
"logo": "assets/images/partners/red-dust-redemption.jpg"
}, },
{ {
"name": "rickroll", "name": "rickroll",
@ -82,7 +82,11 @@
"since": "2025", "since": "2025",
"services": [ "services": [
"Service 1", "Service 1",
"Service 2" "Service 2",
"Map UEFN",
"Bot Discord",
"Branding"
], ],
"stats": [ "stats": [
{ {
@ -108,6 +112,7 @@
"youtube": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "youtube": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"tiktok": "", "tiktok": "",
"website": "#" "website": "#"
} },
"logo": "assets/images/partners/rickroll.png"
} }
] ]

BIN
assets/images/imgrd-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

BIN
assets/images/imgrd-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

View file

@ -73,7 +73,7 @@ document.addEventListener('DOMContentLoaded', () => {
// Générer les slides (tripler pour garantir boucle sans trou) // Générer les slides (tripler pour garantir boucle sans trou)
const copies = [...partners, ...partners, ...partners]; const copies = [...partners, ...partners, ...partners];
partnersTrack.innerHTML = copies.map((p, i) => { partnersTrack.innerHTML = copies.map((p, i) => {
const imgSrc = `assets/images/partners/${p.name}.png`; const imgSrc = p.logo || `assets/images/partners/${p.name}.png`;
return ` return `
<div class="partner-slide" data-partner-idx="${i % partners.length}" role="button" tabindex="0" aria-label="Voir ${p.displayName}"> <div class="partner-slide" data-partner-idx="${i % partners.length}" role="button" tabindex="0" aria-label="Voir ${p.displayName}">
<div class="partner-slide-inner"> <div class="partner-slide-inner">
@ -153,16 +153,26 @@ document.addEventListener('DOMContentLoaded', () => {
function openPartnerModal(p) { function openPartnerModal(p) {
isPaused = true; isPaused = true;
const imgSrc = `assets/images/partners/${p.name}.png`; const imgSrc = p.logo || `assets/images/partners/${p.name}.png`;
document.getElementById('partner-modal-logo-img').src = imgSrc; const logoImg = document.getElementById('partner-modal-logo-img');
document.getElementById('partner-modal-logo-img').alt = p.displayName; const logoInner = document.getElementById('partner-modal-logo-fallback');
document.getElementById('partner-modal-logo-img').onerror = function() { logoImg.src = imgSrc;
logoImg.alt = p.displayName;
logoImg.style.display = 'block';
logoInner.style.background = '';
logoInner.style.justifyContent = '';
// Si l'image échoue → fallback initiales dans l'octogone
logoImg.onerror = function() {
this.style.display = 'none'; this.style.display = 'none';
document.getElementById('partner-modal-logo-fallback').style.display = 'flex'; logoInner.style.background = p.gradient;
document.getElementById('partner-modal-logo-fallback').style.background = p.gradient; logoInner.style.display = 'flex';
document.getElementById('partner-modal-logo-fallback').textContent = p.displayName.substring(0,2).toUpperCase(); logoInner.style.alignItems = 'center';
logoInner.style.justifyContent = 'center';
logoInner.style.fontSize = '2rem';
logoInner.style.fontFamily = "'OmegaLarge', sans-serif";
logoInner.style.color = 'white';
logoInner.textContent = p.displayName.substring(0,2).toUpperCase();
}; };
document.getElementById('partner-modal-logo-fallback').style.display = 'none';
document.getElementById('partner-modal-name').textContent = p.displayName; document.getElementById('partner-modal-name').textContent = p.displayName;
document.getElementById('partner-modal-desc').textContent = p.longDesc; document.getElementById('partner-modal-desc').textContent = p.longDesc;
document.getElementById('partner-modal-since').textContent = p.since; document.getElementById('partner-modal-since').textContent = p.since;
@ -226,7 +236,7 @@ document.addEventListener('DOMContentLoaded', () => {
<div class="team-avatar"> <div class="team-avatar">
<div class="team-avatar-inner" id="team-avatar-inner-${i}"> <div class="team-avatar-inner" id="team-avatar-inner-${i}">
<img src="${imgSrc}" alt="${m.name}" class="team-avatar-photo" <img src="${imgSrc}" alt="${m.name}" class="team-avatar-photo"
onerror="this.style.display='none';document.getElementById('team-avatar-fallback-${i}').style.display='flex';"> onerror="if(this.src.endsWith('.png')){this.src=this.src.replace('.png','.jpg');}else{this.style.display='none';document.getElementById('team-avatar-fallback-${i}').style.display='flex';}">
<span class="team-avatar-fallback" id="team-avatar-fallback-${i}" style="display:none;">${m.avatar}</span> <span class="team-avatar-fallback" id="team-avatar-fallback-${i}" style="display:none;">${m.avatar}</span>
</div> </div>
</div> </div>
@ -322,7 +332,7 @@ document.addEventListener('DOMContentLoaded', () => {
const imgSrc = `assets/images/team/${m.id}.png`; const imgSrc = `assets/images/team/${m.id}.png`;
modalAvatar.innerHTML = ` modalAvatar.innerHTML = `
<img src="${imgSrc}" alt="${m.name}" class="team-modal-avatar-photo" <img src="${imgSrc}" alt="${m.name}" class="team-modal-avatar-photo"
onerror="this.style.display='none';this.nextElementSibling.style.display='flex';"> onerror="if(this.src.endsWith('.png')){this.src=this.src.replace('.png','.jpg');}else{this.style.display='none';this.nextElementSibling.style.display='flex';}">
<span class="team-modal-avatar-fallback">${m.avatar || m.name.charAt(0)}</span> <span class="team-modal-avatar-fallback">${m.avatar || m.name.charAt(0)}</span>
`; `;
modalName.textContent = m.name; modalName.textContent = m.name;

View file

@ -223,9 +223,10 @@
<button class="team-modal-close" id="partner-modal-close"> <button class="team-modal-close" id="partner-modal-close">
<i data-feather="x"></i> <i data-feather="x"></i>
</button> </button>
<div class="team-modal-avatar partner-modal-avatar"> <div class="team-modal-avatar">
<div class="team-modal-avatar-inner" id="partner-modal-logo-fallback">
<img src="" alt="" id="partner-modal-logo-img" class="team-modal-avatar-photo"> <img src="" alt="" id="partner-modal-logo-img" class="team-modal-avatar-photo">
<div class="team-modal-avatar-inner team-modal-avatar-fallback" id="partner-modal-logo-fallback"></div> </div>
</div> </div>
<h3 class="team-modal-name" id="partner-modal-name"></h3> <h3 class="team-modal-name" id="partner-modal-name"></h3>
<p class="team-modal-role">Partenaire depuis <span id="partner-modal-since"></span></p> <p class="team-modal-role">Partenaire depuis <span id="partner-modal-since"></span></p>