feat: équipement, échanges de coups et améliorations des fiches

- équipement des armes et protections (champ equipped, liste des équipés, toggle)
- échanges de coups automatisés (attaque/défense/résolution/blessures dans le chat)
- dialogue d'attaque par type (personnage/PNJ/créature), portées et difficultés
- conservation du scroll des fiches lors des modifs (option scrollable + classe active)
- verrouillage des compétences PNJ en mode jeu
- corrections review combat (défenseur, difficulté >10, multi-cibles, permissions)
This commit is contained in:
2026-08-04 14:14:03 +02:00
parent 31f2f4530c
commit f2c8cfe246
45 changed files with 2105 additions and 78 deletions
+299
View File
@@ -788,6 +788,195 @@ ol.chat-log {
}
}
// ── Arme du jet ───────────────────────────────────────────────────
div.weapon-block {
margin: 4px 0 6px;
padding: 6px 8px;
border: 1px solid @color-hemolymph;
background: rgba(0, 0, 0, 0.1);
.weapon-block-header {
align-items: center;
gap: 6px;
margin-bottom: 2px;
.weapon-icon {
color: @color-hemolymph;
}
.weapon-name {
font-family: "DistressBlack";
text-transform: uppercase;
font-size: @font-size-12;
font-weight: 900;
color: @theme-color-dark;
}
.weapon-targets {
margin-left: auto;
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
color: @theme-color-accent;
}
}
.weapon-details {
gap: 4px 12px;
.weapon-detail {
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
strong {
text-transform: uppercase;
}
}
}
}
// ── Échange de coups ─────────────────────────────────────────────
div.exchange-actions {
margin: 4px 0 6px;
padding: 6px 8px;
border: 1px dashed @color-hemolymph;
background: fade(@color-hemolymph, 8%);
.exchange-header {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 4px;
font-family: "DistressBlack";
text-transform: uppercase;
font-size: @font-size-12;
font-weight: 900;
color: @theme-color-dark;
i { color: @color-hemolymph; }
}
.exchange-target {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 6px;
padding: 3px 0;
.exchange-target-name {
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
color: @theme-color-accent;
}
button.exchange-defend {
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
padding: 2px 8px;
cursor: pointer;
color: @color-chitin-dark;
background: @color-text-light-0;
border: 1px solid @color-border-dark-4;
border-radius: 3px;
.transition();
&:hover {
color: @color-text-light-0;
background: @color-hemolymph;
border-color: @color-hemolymph;
}
}
.exchange-passive {
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
color: @color-amber;
opacity: 0.85;
font-style: italic;
}
}
button.exchange-resolve {
margin-top: 4px;
font-family: "DistressBlack";
text-transform: uppercase;
font-size: @font-size-11;
padding: 3px 12px;
cursor: pointer;
color: @color-text-light-0;
background: fade(@color-hemolymph, 25%);
border: 1px solid @color-hemolymph;
border-radius: 3px;
.transition();
&:hover {
color: @theme-color-dark;
background: @color-hemolymph;
}
}
}
div.exchange-resolution {
margin: 4px 0 6px;
padding: 6px 8px;
border: 1px solid @color-amber;
background: fade(@color-amber, 8%);
.resolution-header {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 4px;
font-family: "DistressBlack";
text-transform: uppercase;
font-size: @font-size-12;
font-weight: 900;
color: @theme-color-dark;
i { color: @color-amber; }
}
.resolution-line {
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
padding: 1px 0;
strong { font-weight: 700; }
.res-hit { color: @color-hemolymph; font-weight: 700; }
.res-dodged,
.res-parried { color: @color-acid-green; font-weight: 700; }
&.res-wound { color: @color-hemolymph; font-weight: 700; }
&.res-noshock,
&.res-nodamage { color: @color-acid-green; }
}
button.exchange-apply {
margin-top: 6px;
font-family: "DistressBlack";
text-transform: uppercase;
font-size: @font-size-11;
padding: 3px 12px;
cursor: pointer;
color: @color-text-light-0;
background: fade(@color-hemolymph, 25%);
border: 1px solid @color-hemolymph;
border-radius: 3px;
.transition();
&:hover:not(:disabled) {
color: @theme-color-dark;
background: @color-hemolymph;
}
&:disabled {
opacity: 0.7;
cursor: default;
color: @color-acid-green;
border-color: @color-acid-green;
}
}
}
// ── Composition du jet ────────────────────────────────────────────
div.roll-pool {
margin: 4px 0;
@@ -846,3 +1035,113 @@ ol.chat-log {
padding: 15px;
}
}
// ── Onglet Expérience ─────────────────────────────────────────────────
.tab.experience {
.experience-summary {
display: flex;
gap: 10px;
margin-bottom: 10px;
.exp-stat {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
padding: 8px;
border: 1px solid @color-border-dark-4;
background: fade(@color-chitin-dark, 30%);
label {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
}
.exp-value {
font-family: "DistressBlack", sans-serif;
font-size: @font-size-24;
color: @color-acid-green;
}
}
}
.exp-actions {
gap: 8px;
margin-bottom: 10px;
button {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-12;
padding: 5px 14px;
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;
}
}
}
.exp-rewards {
margin-bottom: 10px;
padding: 8px;
border: 1px solid @color-border-dark-4;
background: fade(@color-chitin-dark, 20%);
h4 {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-12;
color: @theme-color-dark;
margin: 0 0 6px;
.exp-total {
color: @color-amber;
}
}
.exp-reward-row {
display: flex;
align-items: center;
gap: 8px;
flex-wrap: wrap;
font-size: @font-size-12;
label {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-10;
color: @color-amber;
}
}
.exp-learned {
display: flex;
flex-wrap: wrap;
gap: 6px;
span {
padding: 2px 8px;
font-size: @font-size-11;
border: 1px solid @color-border-dark-4;
border-radius: 3px;
opacity: 0.6;
&.learned {
opacity: 1;
color: @color-acid-green;
border-color: @color-acid-green;
}
}
}
}
}