feat: gestion des Dés de Totems (influence, instincts, interdits)
Release Creation / build (release) Failing after 1m32s

- VermineTotemDice : influence Humain/Adapté (+1D/-1D par domaine, règles
  p. 121), gains/pertes via Instincts/Interdits avec limites (3D/totem,
  5D total) et règles d'échange.
- roll.mjs applique l'influence selon le Totem dominant (au lieu de
  l'ancienne logique basée sur identity.totem).
- Dialogue TotemDiceDialog (instinct Humain/autre totem, interdit Humain,
  acte grave ±2D) + bouton et ligne d'influence sur la fiche personnage.
- Dés de Totem gagnés en cas d'échec à l'apprentissage Dé d'Évolution
  (dés dépensés, garde capacité vide).
- Couleur de texte @color-text-light-2 assombrie (#c9e0c0 → #3f9b55)
  pour la lisibilité dans tous les dialogues.

fix: robustesse et visibilité des évolutions

- buyEvolutionDialog : n'efface les Dés d'Évolution que si l'item est créé.
- Flag mutation éditable sur la fiche item evolution + badge
  Adaptation/Mutation dans la liste du personnage.
- loseDie : applique aussi la limite totale de 5 dés au gain Adapté.
- Case "acte grave" conservée entre les rendus du dialogue.
This commit is contained in:
2026-08-06 15:32:55 +02:00
parent 3cb96410b9
commit b0a3aff648
23 changed files with 884 additions and 100 deletions
+23 -2
View File
@@ -696,6 +696,27 @@
&:last-child { border-bottom: none; }
}
.evolution-badge {
margin-left: 6px;
padding: 1px 6px;
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
text-transform: uppercase;
border-radius: 3px;
&.adaptation {
color: @color-text-light-0;
background: fade(@color-acid-green, 25%);
border: 1px solid @color-acid-green;
}
&.mutation {
color: @color-text-light-0;
background: fade(@color-hemolymph, 30%);
border: 1px solid @color-hemolymph;
}
}
}
// ── V2 tab navigation — chitin-plate style ─────────────────────────
@@ -706,7 +727,7 @@
margin: 0;
padding: 0;
background: @color-chitin-dark;
border-bottom: 2px solid @color-amber;
border-bottom: 2px solid @color-hemolymph;
min-height: 36px;
> a {
@@ -730,7 +751,7 @@
}
&.active {
background: linear-gradient(180deg, @color-amber 0%, @color-honeycomb 100%);
background: @color-honeycomb;
color: @color-chitin-dark;
&::after {
+4 -4
View File
@@ -69,7 +69,7 @@
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
}
@@ -111,7 +111,7 @@
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
input[type="number"] {
@@ -134,7 +134,7 @@
}
&.crisis { border-left-color: @color-hemolymph; .gauge-state { color: @color-hemolymph; } }
&.low { border-left-color: @color-amber; .gauge-state { color: @color-amber; } }
&.low { border-left-color: @color-honeycomb; .gauge-state { color: @color-honeycomb; } }
&.stable { border-left-color: @color-acid-green; .gauge-state { color: @color-acid-green; } }
&.opulent { border-left-color: @theme-color-accent; .gauge-state { color: @theme-color-accent; } }
}
@@ -146,7 +146,7 @@
&.high { color: @color-acid-green; }
&.normal { color: @color-text-light-0; }
&.low { color: @color-amber; }
&.low { color: @color-honeycomb; }
&.crisis { color: @color-hemolymph; }
}
}
+1 -1
View File
@@ -188,7 +188,7 @@
.capacity-type {
flex: 0 0 auto;
font-size: @font-size-12;
color: @color-amber;
color: @color-text-light-2;
text-transform: uppercase;
}
+32
View File
@@ -124,5 +124,37 @@
}
}
}
.totem-influence-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 6px;
margin-top: 2px;
font-size: 0.75rem;
.totem-influence-label {
color: @color-text-light-0;
strong.totem-human { color: @totem-human-color; }
strong.totem-adapted { color: @totem-adapted-color; }
}
.totem-manage-btn {
flex: none;
padding: 2px 8px;
cursor: pointer;
color: @color-text-light-0;
background: fade(@color-hemolymph, 20%);
border: 1px solid @color-hemolymph;
border-radius: 3px;
.transition();
&:hover {
color: @theme-color-dark;
background: @color-hemolymph;
}
}
}
}
}
+2 -2
View File
@@ -124,7 +124,7 @@
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
}
@@ -171,7 +171,7 @@
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
}
}
+8 -8
View File
@@ -732,7 +732,7 @@ ol.chat-log {
}
#required {
color: @color-amber;
color: @color-text-light-2;
}
}
@@ -894,7 +894,7 @@ ol.chat-log {
.exchange-passive {
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
opacity: 0.85;
font-style: italic;
}
@@ -923,8 +923,8 @@ ol.chat-log {
div.exchange-resolution {
margin: 4px 0 6px;
padding: 6px 8px;
border: 1px solid @color-amber;
background: fade(@color-amber, 8%);
border: 1px solid @color-hemolymph;
background: fade(@color-hemolymph, 8%);
.resolution-header {
display: flex;
@@ -937,7 +937,7 @@ ol.chat-log {
font-weight: 900;
color: @theme-color-dark;
i { color: @color-amber; }
i { color: @color-hemolymph; }
}
.resolution-line {
@@ -1063,7 +1063,7 @@ ol.chat-log {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
.exp-value {
@@ -1111,7 +1111,7 @@ ol.chat-log {
margin: 0 0 6px;
.exp-total {
color: @color-amber;
color: @color-text-light-2;
}
}
@@ -1126,7 +1126,7 @@ ol.chat-log {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
}
+99 -10
View File
@@ -188,7 +188,7 @@ iframe {
> label {
font-size: @font-size-13;
color: @color-amber;
color: @color-text-light-2;
white-space: nowrap;
}
@@ -294,7 +294,7 @@ iframe {
cursor: pointer;
&:hover {
color: @color-amber;
color: @color-text-light-highlight;
}
}
@@ -347,7 +347,7 @@ iframe {
cursor: pointer;
&:hover {
color: @color-amber;
color: @color-text-light-highlight;
}
}
}
@@ -381,7 +381,7 @@ iframe {
cursor: pointer;
&:hover {
color: @color-amber;
color: @color-text-light-highlight;
}
small {
@@ -487,7 +487,7 @@ iframe {
.label {
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
.combat-target-tag {
@@ -527,7 +527,7 @@ iframe {
.label {
font-size: @font-size-12;
color: @color-amber;
color: @color-text-light-2;
}
.exp-value {
@@ -555,7 +555,7 @@ iframe {
input[type="radio"] { flex: none; }
&:hover { color: @color-amber; }
&:hover { color: @color-text-light-highlight; }
}
}
@@ -581,8 +581,8 @@ iframe {
flex-wrap: wrap;
gap: 8px 16px;
padding: 8px;
border: 1px solid @color-amber;
background: fade(@color-amber, 8%);
border: 1px solid @color-hemolymph;
background: fade(@color-hemolymph, 8%);
.context-item {
display: flex;
@@ -593,7 +593,7 @@ iframe {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
color: @color-text-light-2;
}
.context-value {
@@ -721,3 +721,92 @@ iframe {
}
}
}
// ── Achat d'Adaptation/Mutation ───────────────────────────────────────
.application.buy-evolution .bonus-item {
align-items: center;
gap: 8px;
> label.label {
flex: none;
font-size: @font-size-12;
color: @color-text-light-2;
white-space: nowrap;
}
input[type="text"] {
flex: 1 1 auto;
min-width: 0;
}
select {
flex: 1 1 auto;
min-width: 0;
width: auto;
}
input[type="checkbox"] {
flex: none;
width: 18px;
height: 18px;
}
}
// ── Gestion des Dés de Totems ─────────────────────────────────────────
.application.totem-dice .totem-dice-state {
gap: 12px;
padding: 6px 8px;
border: 1px solid @color-hemolymph;
background: fade(@color-hemolymph, 8%);
.totem-state {
display: flex;
align-items: center;
gap: 6px;
.label {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-12;
color: @color-text-light-2;
white-space: nowrap;
}
&.totem-human .label { color: @color-text-light-2; }
&.totem-adapted .label { color: @color-text-light-2; }
.value {
font-family: "Roboto", sans-serif;
font-size: @font-size-14;
font-weight: 700;
color: @color-text-light-0;
}
}
}
.application.totem-dice .totem-influence {
font-size: @font-size-16;
}
.application.totem-dice .totem-actions {
gap: 8px;
button {
flex: 1 1 100%;
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-12;
padding: 6px 10px;
cursor: pointer;
color: @color-text-light-0;
background: fade(@color-hemolymph, 15%);
border: 1px solid @color-hemolymph;
border-radius: 3px;
.transition();
&:hover {
color: @theme-color-dark;
background: @color-hemolymph;
}
}
}
+1 -2
View File
@@ -20,7 +20,7 @@
// Niveaux de gris pour le texte clair
@color-text-light-0: #fff;
@color-text-light-1: #e0f0f0;
@color-text-light-2: #c9e0c0;
@color-text-light-2: #3f9b55;
@color-text-light-3: #90c4a4;
@color-text-light-4: #80c08b;
@color-text-light-5: #60b06b;
@@ -139,7 +139,6 @@
// Couleurs insecte / organique
@color-acid-green: #1e7d32;
@color-amber: #e8b84b;
@color-chitin-dark: #2a2520;
@color-hemolymph: #8b4513;
@color-membrane: rgba(106, 176, 76, 0.1);