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
+248
View File
@@ -399,6 +399,254 @@ iframe {
}
}
// ── Combat dialog (attaque) ──────────────────────────────────────
.combat-mode-label {
margin: 0;
text-align: center;
font-size: @font-size-14;
color: @color-hemolymph;
text-transform: uppercase;
}
.locked-value {
flex: 1;
display: flex;
align-items: center;
min-height: 28px;
padding: 0 8px;
font-size: @font-size-12;
color: @color-chitin-dark;
background: @color-text-light-0;
border-radius: 3px;
.custom-select-style();
}
.combat-dialog-weapon {
border: 1px solid @color-hemolymph;
padding: 6px 8px;
background: fade(@color-chitin-dark, 40%);
.weapon-block-header {
align-items: center;
gap: 6px;
.weapon-icon { color: @color-hemolymph; }
.weapon-name {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-12;
font-weight: 900;
color: @theme-color-dark;
}
}
.weapon-details {
gap: 4px 12px;
flex-wrap: wrap;
.weapon-detail {
font-family: "Roboto", sans-serif;
font-size: @font-size-11;
color: @color-text-light-0;
strong { text-transform: uppercase; }
}
}
}
.combat-difficulty-options {
flex-wrap: wrap;
gap: 8px;
.difficulty-option {
display: flex;
align-items: center;
gap: 4px;
font-family: "Roboto", sans-serif;
text-transform: none;
font-size: @font-size-12;
color: @color-text-light-0;
cursor: pointer;
input[type="radio"] { flex: none; }
&.locked {
opacity: 0.8;
font-style: italic;
}
}
}
.combat-targets {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 6px;
padding: 4px 2px;
.label {
font-size: @font-size-11;
color: @color-amber;
}
.combat-target-tag {
padding: 2px 8px;
font-size: @font-size-11;
font-family: "Roboto", sans-serif;
color: @color-text-light-0;
background: fade(@color-hemolymph, 20%);
border: 1px solid fade(@color-hemolymph, 50%);
border-radius: 3px;
}
}
// ── Phase d'Expérience ───────────────────────────────────────────
.exp-phase-characters {
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 8px;
min-height: 0;
details > div:not(summary) {
padding: 8px;
background: fade(@color-chitin-dark, 30%);
}
}
// ── Dialogue d'apprentissage ─────────────────────────────────────
.learning-summary {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 8px;
border: 1px solid @color-hemolymph;
background: fade(@color-hemolymph, 10%);
.label {
font-size: @font-size-12;
color: @color-amber;
}
.exp-value {
font-family: "DistressBlack", sans-serif;
font-size: @font-size-20;
color: @color-acid-green;
}
}
.learning-type {
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 6px 2px;
label {
display: flex;
align-items: center;
gap: 4px;
font-family: "Roboto", sans-serif;
text-transform: none;
font-size: @font-size-12;
color: @color-text-light-0;
cursor: pointer;
input[type="radio"] { flex: none; }
&:hover { color: @color-amber; }
}
}
.learning-targets {
display: flex;
flex-direction: column;
gap: 6px;
padding: 8px;
border: 1px solid @color-border-dark-4;
background: fade(@color-chitin-dark, 30%);
.learning-hint {
margin: 0;
font-size: @font-size-11;
font-style: italic;
color: @color-text-light-0;
opacity: 0.75;
}
}
.learning-result {
display: flex;
flex-wrap: wrap;
gap: 8px 16px;
padding: 8px;
border: 1px solid @color-amber;
background: fade(@color-amber, 8%);
.context-item {
display: flex;
align-items: center;
gap: 6px;
.context-label {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
color: @color-amber;
}
.context-value {
font-family: "Roboto", sans-serif;
font-size: @font-size-13;
font-weight: 700;
color: @color-text-light-0;
}
}
}
// ── Transfert de Dés d'Expérience ─────────────────────────────────
.experience-section {
.experience-controls {
gap: 8px;
padding: 8px;
.experience-group {
font-size: @font-size-11;
color: @color-text-light-0;
opacity: 0.8;
#exp-group {
font-weight: 700;
color: @color-acid-green;
}
}
button[data-action="giveToGroup"] {
font-family: "DistressBlack", sans-serif;
text-transform: uppercase;
font-size: @font-size-11;
padding: 3px 12px;
cursor: pointer;
color: @color-text-light-0;
background: fade(@color-acid-green, 15%);
border: 1px solid @color-acid-green;
border-radius: 3px;
.transition();
&:hover:not(:disabled) {
color: @theme-color-dark;
background: @color-acid-green;
}
&:disabled {
opacity: 0.6;
cursor: default;
}
}
}
}
// ── Total dice pool section ─────────────────────────────────────
.total-section {
align-items: center;