classe et espece

This commit is contained in:
2026-02-17 12:22:38 +04:00
parent 3210775cee
commit 179eedb321
21 changed files with 421 additions and 138 deletions

View File

@@ -44,25 +44,28 @@ const classData = personnages.reduce((acc, p) => {
return acc;
}, {});
// 2. Groupement par ESPECE (Bordure HAUT = Classe principale)
// 2. Groupement par ESPECE (Bordure HAUT = Couleurs des classes)
const especeData = personnages.reduce((acc, p) => {
if (!p.data.espece) return acc;
const key = p.data.espece.toLowerCase();
if (!acc[key]) acc[key] = [];
const mainClassName = p.data.classes_detail?.[0]?.nom;
const pClassData = classes.find(
(cl) =>
cl.id.toLowerCase() === mainClassName?.toLowerCase() ||
cl.data.title?.toLowerCase() === mainClassName?.toLowerCase(),
);
const encreKey = pClassData?.data.encre?.toLowerCase();
// On récupère les couleurs de TOUTES les classes du personnage
const classColors = (p.data.classes_detail || []).map((c) => {
const pClassData = classes.find(
(cl) =>
cl.id.toLowerCase() === c.nom?.toLowerCase() ||
cl.data.title?.toLowerCase() === c.nom?.toLowerCase(),
);
const encreKey = pClassData?.data.encre?.toLowerCase();
return SPECTRUM[encreKey] || "#ffffff";
});
acc[key].push({
id: p.id, // ID nécessaire pour le lien
id: p.id,
nom: p.data.nom,
niveau: p.data.niveau_global || 1,
colorEncre: SPECTRUM[encreKey] || "#ffffff",
colors: classColors, // Tableau de couleurs (1 ou plusieurs)
});
return acc;
}, {});
@@ -75,6 +78,12 @@ const especeData = personnages.reduce((acc, p) => {
<div class="dnd-bar"></div>
<p class="dnd-intro">
La classe définit vos compétences et votre rôle.
<br />
<span style="color:rgba(147, 72, 255, 1)">Arcane</span>,
<span style="color:rgba(230, 57, 70, 1)">Martial</span>,
<span style="color:rgba(100, 100, 100, 1)">Neutre</span>
<span style="color:rgba(200, 155, 60, 1)">Sacré</span>,
<span style="color:rgba(42, 157, 143, 1)">Primal</span>
</p>
<div class="class-grid">
@@ -125,7 +134,13 @@ const especeData = personnages.reduce((acc, p) => {
<h2 class="dnd-title">Choisissez votre Espèce</h2>
<div class="dnd-bar"></div>
<p class="dnd-intro">
L'espèce influence votre apparence et votre histoire.
L'espèce influence votre apparence et votre histoire
<br />
<span style="color: rgba(200, 155, 60, 1)">solaire</span>,
<span style="color: rgba(0, 171, 255, 1)">elementaire</span>,
<span style="color: rgba(139, 69, 19, 1)">terrestre</span>,
<span style="color: rgba(0, 128, 0, 1)">sylvestre</span>,
<span style="color:rgba(75, 0, 130, 1)">ombre</span>
</p>
<div class="class-grid">
@@ -144,18 +159,28 @@ const especeData = personnages.reduce((acc, p) => {
>
<h3>{espece.data.title}</h3>
<div class="bubble-container">
{charactersInEspece.map((p) => (
<a
href={`/personnages/${p.id}`}
class="notification-bubble bubble-class-border"
style={`--p-color: ${p.colorEncre}`}
>
<span class="p-name">{p.nom}</span>
<span class="p-lvl">
Niv.{p.niveau}
</span>
</a>
))}
{charactersInEspece.map((p) => {
// Construction du dégradé : si une seule couleur, on la double pour le gradient
const gradient =
p.colors.length > 1
? `linear-gradient(to right, ${p.colors[0]}, ${p.colors[1]})`
: p.colors[0];
return (
<a
href={`/personnages/${p.id}`}
class="notification-bubble bubble-class-border"
style={`--p-gradient: ${gradient}`}
>
<span class="p-name">
{p.nom}
</span>
<span class="p-lvl">
Niv.{p.niveau}
</span>
</a>
);
})}
</div>
<p>{espece.data.description}</p>
<a
@@ -258,7 +283,19 @@ const especeData = personnages.reduce((acc, p) => {
box-shadow: inset 0 -2px 0 0 var(--p-color);
}
.bubble-class-border {
border-top: 3px solid var(--p-color) !important;
position: relative;
border-top: none !important;
overflow: hidden;
}
.bubble-class-border::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px; /* L'épaisseur de ta bordure haute */
background: var(--p-gradient);
}
.p-lvl {
font-size: 0.6rem;