Fix creature sheet: complete TECHNIQUE tab + copper theme

- Fix tabGroups 'stats'→'principal' (tab content was invisible)
- Add 'creature' CSS class to distinguish from personnage sheet
- New header layout: stat cards (Ressources, Vigueur, Combat)
- Rewrite creature template with full TECHNIQUE tab content:
  * Attributes with icons and level dropdowns (0-35)
  * Vitesse input
  * Santé section (Vigueur seuil)
  * Actions de combat (Initiative, Monté/Déf. totale, Assommer,
    Coup bas, Immobiliser, Repousser, Désengager)
  * Adversités section (reuses personnage CSS classes)
- Copper/orange CSS theme for .creature class overrides
- Add .stat-derived-value CSS for non-editable derived stats

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-04-03 09:35:12 +02:00
parent f0969c9eb4
commit b255a628fe
4 changed files with 254 additions and 236 deletions

View File

@@ -2,27 +2,65 @@
{{!-- Sheet Header --}}
<header class="sheet-header">
<div class="header-fields background-sheet-header">
<div class="flexrow">
<img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
<div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name" /></h1>
<div class="flexrow">
<ul class="item-list alternate-list">
<div class="header-banner">
<img class="profile-img" src="{{actor.img}}" data-action="editImage" title="{{actor.name}}" />
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Nom de la créature" /></h1>
</div>
<li class="item flexrow ">
<h4 class="item-name-label competence-name">Ressources</h4>
<input type="text" class="padd-right status-small-label color-class-common item-field-label-short"
name="system.ressources.value" value="{{system.ressources.value}}" data-dtype="Number" />
</li>
</ul>
<div class="header-stat-cards">
{{!-- RESSOURCES --}}
<div class="stat-card card-ba">
<div class="stat-card-title">★ Ressources</div>
<div class="stat-card-content">
<div class="stat-field">
<label>Valeur</label>
<input type="text" name="system.ressources.value" value="{{system.ressources.value}}" data-dtype="Number" />
</div>
</div>
</div>
{{!-- VIGUEUR --}}
<div class="stat-card card-vigueur">
<div class="stat-card-title">♥ Vigueur <span class="stat-sub">({{system.sante.vigueur}})</span></div>
<div class="stat-card-content">
<div class="stat-field">
<label>État</label>
<select name="system.sante.etat">
{{selectOptions combativiteList selected=system.sante.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
</select>
</div>
<div class="stat-field">
<label>Niveaux</label>
<input type="text" name="system.sante.nbcombativite" value="{{system.sante.nbcombativite}}" data-dtype="Number" />
</div>
</div>
</div>
{{!-- COMBAT --}}
<div class="stat-card card-ame">
<div class="stat-card-title">⚡ Combat</div>
<div class="stat-card-content">
<div class="stat-field">
<label>Init.</label>
<span class="stat-derived-value">{{initiative}}</span>
</div>
<div class="stat-field">
<label>Déf.</label>
<span class="stat-derived-value">{{combat.defenseTotal}}</span>
</div>
<div class="stat-field">
<label>Prot.</label>
<span class="stat-derived-value">{{protectionTotal}}</span>
</div>
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<hr>
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="principal">Technique</a>
@@ -33,23 +71,25 @@
</nav>
<hr>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Main Tab --}}
{{!-- Technique Tab --}}
<div class="tab principal" data-group="primary" data-tab="principal">
<div class="grid grid-2col">
{{!-- Colonne gauche : Attributs + Santé + Actions --}}
<div class="sheet-box color-bg-archetype">
<div class="section-title">Attributs</div>
<ul class="item-list alternate-list">
{{#each system.attributs as |attr key|}}
<li class="item flexrow " data-attr-key="{{key}}">
<li class="item flexrow" data-attr-key="{{key}}">
<img class="item-name-img" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/{{attr.labelnorm}}.webp">
<span class="item-name-label competence-name item-field-label-medium"><a
class="roll-attribut">{{attr.label}}</a></span>
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number">
<span class="item-name-label competence-name item-field-label-medium">
<a data-action="rollAttribut" data-attr-key="{{key}}" data-tooltip="Jet {{attr.label}}">{{attr.label}}</a>
</span>
<select class="status-small-label color-class-common competence-niveau"
name="system.attributs.{{key}}.value" data-dtype="Number">
{{selectOptions @root.config.listeNiveauCreature selected=attr.value}}
</select>
</li>
@@ -61,194 +101,157 @@
value="{{system.vitesse.value}}" data-dtype="Number" />
</li>
</ul>
<h4 class="item-name-label competence-name">Santé</h4>
<div class="section-title">Santé</div>
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="label-name item-field-label-medium">Vigueur</label>
<label class="label-name item-field-label-medium">Vigueur (seuil)</label>
<input type="text" class="padd-right numeric-input item-field-label-short" data-dtype="Number"
name="system.sante.vigueur" value="{{system.sante.vigueur}}">
</li>
<li class="item flexrow">
<label class="label-name item-field-label-medium">Etat</label>
<select class="label-name item-field-label-medium" type="text" name="system.sante.etat"
value="{{system.sante.etat}}" data-dtype="Number">
{{selectOptions combativiteList selected=system.sante.etat valueAttr="value" nameAttr="value" labelAttr="label"}}
</select>
</li>
</ul>
<h4 class="item-name-label competence-name">Combat</h4>
<div class="section-title">Actions de combat</div>
<ul class="item-list alternate-list">
<li class="item flexrow">
<button class="chat-card-button roll-initiative">Initiative (actuelle : {{initiative}} )</button>
<button type="button" class="chat-card-button" data-action="rollInitiative">Initiative ({{initiative}})</button>
</li>
<li class="item flexrow">
<input type="checkbox" name="system.combat.monte" {{checked system.combat.monte}} />
<label class="item-field-label-medium">Monté</label>
<input type="checkbox" name="system.combat.defensetotale" {{checked system.combat.defensetotale}} />
<label class="item-field-label-medium">Déf. totale</label>
</li>
<li class="item flexrow">
<button type="button" class="chat-card-button" data-action="rollAssommer">Assommer</button>
<button type="button" class="chat-card-button" data-action="rollCoupBas">Coup bas</button>
</li>
<li class="item flexrow">
<button type="button" class="chat-card-button" data-action="rollImmobiliser">Immobiliser</button>
<button type="button" class="chat-card-button" data-action="rollRepousser">Repousser</button>
</li>
<li class="item flexrow">
<button type="button" class="chat-card-button" data-action="rollDesengager">Se désengager</button>
</li>
</ul>
</div>
<div class="sheet-box color-bg-archetype">
<h4 class="item-name-label competence-name">Adversité</h4>
<ul class="item-list alternate-list">
{{!-- Colonne droite : Adversité --}}
<div class="sheet-box color-bg-archetype adversite-section">
<h4 class="adversite-section-title">Adversités</h4>
<div class="adversite-cards">
{{#each system.adversite as |adv key|}}
<li class="item flexrow" data-adversite="{{key}}">
<a class="adversite-modify plus-minus-button" data-adversite-value="-1">-</a>
<div class="icon-adversite-container">
<img class="icon-adversite" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/gemme_{{key}}.webp">
<div class="adversite-text">{{adv}}</div>
<div class="adversite-card adversite-{{key}}" data-adversite="{{key}}">
<div class="adversite-card-title">{{upperFirst key}}</div>
<img class="adversite-gem" src="systems/fvtt-mournblade-cyd-2-0/assets/icons/gemme_{{key}}.webp">
<div class="adversite-value">{{adv}}</div>
<div class="adversite-controls">
<a data-action="modifyAdversite" class="adv-btn adv-minus" data-adversite-value="-1"></a>
<a data-action="modifyAdversite" class="adv-btn adv-plus" data-adversite-value="1">+</a>
</div>
<a class="adversite-modify plus-minus-button" data-adversite-value="1">+</a>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
</li>
</div>
{{/each}}
</ul>
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="label-name item-field-label-long1">Niveaux de combativité</label>
<input type="text" class="padd-right numeric-input item-field-label-short" data-dtype="Number"
name="system.sante.nbcombativite" value="{{system.sante.nbcombativite}}">
</li>
</ul>
<ul class="item-list alternate-list">
<li class="item flexrow">
<label class="item-field-label-short">Monté?</label>
<input type="checkbox" name="system.combat.monte" {{checked system.combat.monte}} />
<label class="item-field-label-short">&nbsp</label>
<label class="item-field-label-medium">Défense totale?</label>
<input type="checkbox" name="system.combat.defensetotale" {{checked system.combat.defensetotale}} />
</li>
<li class="item flexrow">
<button class="chat-card-button roll-assommer">Assommer</button>
<button class="chat-card-button roll-coup-bas">Coup bas</button>
<button class="chat-card-button roll-immobiliser">Immobiliser</button>
</li>
<li class="item flexrow">
<button class="chat-card-button roll-repousser">Repousser</button>
<button class="chat-card-button roll-desengager">Se désengager</button>
</li>
</ul>
</div>
<div class="adversite-total {{#if adversiteTotal}}adversite-total-nonzero{{/if}}"
data-tooltip="Malus soustrait à tous les jets de dés">
<span class="adversite-total-label">Malus jets</span>
<span class="adversite-total-value">{{adversiteTotal}}</span>
</div>
</div>
</div>
</div>
{{!-- Competence Tab --}}
{{!-- Compétences Tab --}}
<div class="tab competences" data-group="primary" data-tab="competences">
<div class="flexrow">
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header">
<h3><label class="items-title-text">Compétences</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Niveau</label>
</span>
<span class="item-field-label-short"><label class="short-label">Niveau</label></span>
<div class="item-filler">&nbsp;</div>
</li>
{{#each skills as |skill key|}}
<li class="item flexrow " data-item-id="{{skill._id}}" data-item-type="competence">
<li class="item flexrow" data-item-id="{{skill._id}}" data-item-type="competence">
<img class="item-name-img" src="{{skill.img}}" />
<div class="flexcol item-name-label">
<span class="item-name-label competence-name"><a class="roll-competence item-field-label-short"
data-attr-key="tochoose">{{skill.name}}</a></span>
<span class="predilection-text">
{{#each skill.system.predilections as |pred key|}}
{{#if (and pred.acquise (not pred.used))}}
{{pred.name}},
{{/if}}
{{/each}}
</span>
<span class="item-name-label competence-name">
<a data-action="rollCompetence" data-attr-key="tochoose">{{skill.name}}</a>
</span>
<span class="predilection-text">
{{#each skill.system.predilections as |pred key|}}
{{#if (and pred.acquise (not pred.used))}}{{pred.name}}, {{/if}}
{{/each}}
</span>
</div>
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
data-item-field="niveau" value="{{skill.system.niveau}}" data-dtype="Number">
<select class="status-small-label color-class-common edit-item-data competence-niveau"
data-item-field="niveau" data-dtype="Number">
{{selectOptions @root.config.listeNiveauCreature selected=skill.system.niveau}}
</select>
{{#if (ne skill.system.attribut1 "none")}}
<button class="roll-competence button-sheet-roll" data-attr-key="{{skill.system.attribut1}}">{{upper
skill.system.attribut1}} : {{skill.system.attribut1total}}</button>
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut1}}">{{upper skill.system.attribut1}} : {{skill.system.attribut1total}}</button>
{{/if}}
{{#if (ne skill.system.attribut2 "none")}}
<button class="roll-competence button-sheet-roll" data-attr-key="{{skill.system.attribut2}}">{{upper
skill.system.attribut2}} : {{skill.system.attribut2total}}</button>
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut2}}">{{upper skill.system.attribut2}} : {{skill.system.attribut2total}}</button>
{{/if}}
{{#if (ne skill.system.attribut3 "none")}}
<button class="roll-competence button-sheet-roll" data-attr-key="{{skill.system.attribut3}}">{{upper
skill.system.attribut3}} : {{skill.system.attribut3total}}</button>
<button data-action="rollCompetence" class="button-sheet-roll" data-attr-key="{{skill.system.attribut3}}">{{upper skill.system.attribut3}} : {{skill.system.attribut3total}}</button>
{{/if}}
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
<a class="item-control" data-action="editItem" title="Éditer"><i class="fas fa-edit"></i></a>
<a class="item-control" data-action="deleteItem" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Talents Tab --}}
<div class="tab talents" data-group="primary" data-tab="talents">
<div class="flexrow">
<div class="sheet-box color-bg-archetype">
<ul class="item-list alternate-list">
<li class="item flexrow">
<li class="item flexrow list-item items-title-bg">
<span class="item-name-label-header">
<h3><label class="items-title-text">Talents</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Résumé</label>
</span>
<span class="item-field-label-long2"><label class="short-label">Résumé</label></span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="talent" title="Ajouter un Talent"><i
class="fas fa-plus"></i></a>
<a class="item-control" data-action="createItem" data-type="talent" title="Ajouter un Talent">
<i class="fas fa-plus"></i>
</a>
</div>
</li>
{{#each talents as |talent key|}}
<li class="item flexrow " data-item-id="{{talent._id}}" data-item-type="talent">
<li class="item flexrow" data-item-id="{{talent._id}}" data-item-type="talent">
<img class="item-name-img" src="{{talent.img}}" />
<span class="item-name-label competence-name">{{talent.name}}</span>
<span class="item-name-label item-field-label-long2">{{talent.system.resumebonus}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
<a class="item-control" data-action="editItem" title="Éditer"><i class="fas fa-edit"></i></a>
<a class="item-control" data-action="deleteItem" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
<div class="flexrow">
</div>
{{!-- Equipement Tab --}}
{{!-- Armes Tab --}}
<div class="tab armes" data-group="primary" data-tab="armes">
<div class="flexcol">
<div class="sheet-box color-bg-archetype">
@@ -257,56 +260,46 @@
<span class="item-name-label-header">
<h3><label class="items-title-text">Armes</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Attaque</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Défense</label>
</span>
<span class="item-field-label-short">
<label class="short-label">Dégats</label>
</span>
<span class="item-field-label-short"><label class="short-label">Attaque</label></span>
<span class="item-field-label-short"><label class="short-label">Défense</label></span>
<span class="item-field-label-short"><label class="short-label">Dégâts</label></span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i
class="fas fa-plus"></i></a>
<a class="item-control" data-action="createItem" data-type="arme" title="Ajouter une arme">
<i class="fas fa-plus"></i>
</a>
</div>
</li>
{{#each armes as |arme key|}}
<li class="item flexrow " data-item-id="{{arme._id}}" data-item-type="arme">
<li class="item flexrow" data-item-id="{{arme._id}}" data-item-type="arme">
<img class="item-name-img" src="{{arme.img}}" />
<span class="item-name-label competence-name">{{arme.name}}</span>
<span class="item-field-label-short">
{{#if arme.system.equipped}}
<button class="roll-arme-offensif button-sheet-roll">{{arme.system.totalOffensif}}</button>
<button data-action="rollArmeOffensif" class="button-sheet-roll">{{arme.system.totalOffensif}}</button>
{{else}}
<button disabled class="roll-arme-offensif button-sheet-roll">{{arme.system.totalOffensif}}</button>
<button disabled class="button-sheet-roll">{{arme.system.totalOffensif}}</button>
{{/if}}
</span>
{{#if arme.system.isdefense}}
<span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short defense-sheet">{{arme.system.totalDefensif}}</label></span>
<span class="item-field-label-short arme-defensif"><label class="defense-sheet">{{arme.system.totalDefensif}}</label></span>
{{else}}
<span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short defense-sheet">N/A</label></span>
<span class="item-field-label-short arme-defensif"><label class="defense-sheet">N/A</label></span>
{{/if}}
<span class="item-field-label-short">
{{#if arme.system.equipped}}
<button class="roll-arme-degats button-sheet-roll">{{arme.system.totalDegats}}</button>
<button data-action="rollArmeDegats" class="button-sheet-roll">{{arme.system.totalDegats}}</button>
{{else}}
<button disabled class="roll-arme-degats button-sheet-roll">{{arme.system.totalDegats}}</button>
<button disabled class="button-sheet-roll">{{arme.system.totalDegats}}</button>
{{/if}}
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-equip" title="Equipé">{{#if arme.system.equipped}}<i
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-edit" title="Editer l'Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'Item"><i class="fas fa-trash"></i></a>
<a class="item-control" data-action="equipItem" title="Équiper">
{{#if arme.system.equipped}}<i class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}
</a>
<a class="item-control" data-action="editItem" title="Éditer"><i class="fas fa-edit"></i></a>
<a class="item-control" data-action="deleteItem" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
@@ -319,28 +312,28 @@
<span class="item-name-label-header">
<h3><label class="items-title-text">Protections</label></h3>
</span>
<span class="item-field-label-short">
<label class="short-label">Protection</label>
</span>
<span class="item-field-label-short"><label class="short-label">Protection</label></span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="protection" title="Ajouter une arme"><i
class="fas fa-plus"></i></a>
<a class="item-control" data-action="createItem" data-type="protection" title="Ajouter une protection">
<i class="fas fa-plus"></i>
</a>
</div>
</li>
{{#each protections as |protection key|}}
<li class="item flexrow " data-item-id="{{protection._id}}" data-item-type="protection">
<li class="item flexrow" data-item-id="{{protection._id}}" data-item-type="protection">
<img class="item-name-img" src="{{protection.img}}" />
<span class="item-name-label competence-name">{{protection.name}}</span>
<span class="item-field-label-short arme-defensif"><label
class="arme-defensif">{{protection.system.protection}}</label>
<span class="item-field-label-short arme-defensif">
<label class="arme-defensif">{{protection.system.protection}}</label>
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control item-equip" title="Equipé">{{#if protection.system.equipped}}<i
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-edit" title="Editer l'Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'Item"><i class="fas fa-trash"></i></a>
<a class="item-control" data-action="equipItem" title="Équiper">
{{#if protection.system.equipped}}<i class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}
</a>
<a class="item-control" data-action="editItem" title="Éditer"><i class="fas fa-edit"></i></a>
<a class="item-control" data-action="deleteItem" title="Supprimer"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
@@ -348,28 +341,23 @@
</div>
</div>
</div>
{{!-- Biography Tab --}}
{{!-- Bio&Notes Tab --}}
<div class="tab biodata" data-group="primary" data-tab="biodata">
<span>
<h3>Description</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
<div class="sheet-box color-bg-archetype">
<div class="section-title">Description</div>
<div class="medium-editor item-text-long-line">
{{editor description target="system.biodata.description" button=true owner=owner editable=editable}}
</div>
</div>
<span>
<h3>Habitat</h3>
</span>
<div class="medium-editor item-text-long-line">
{{editor habitat target="system.biodata.habitat" button=true owner=owner editable=editable}}
<div class="sheet-box color-bg-archetype">
<div class="section-title">Habitat</div>
<div class="medium-editor item-text-long-line">
{{editor habitat target="system.biodata.habitat" button=true owner=owner editable=editable}}
</div>
</div>
</div>
</section>
</section>
</section>