Redesign adversité section: 3 colored cards layout

Replace vertical list with horizontal card layout matching header style:
- BLEUE (blue), ROUGE (red), NOIRE (dark) cards with top-colored borders
- Gem image 52px with drop-shadow + hover scale
- Large numeric counter (Signika font)
- Colored -/+ buttons (red minus, green plus)
- Modifier fields compact row below cards
- Section title with amber letterhead style

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-04-03 08:04:45 +02:00
parent 28cab15b37
commit 0ce42d0fe3
3 changed files with 363 additions and 23 deletions

View File

@@ -790,6 +790,179 @@
}
}
}
/* ==================== Adversité Cards ==================== */
.adversite-section {
padding: 6px 8px 8px;
.adversite-section-title {
font-family: "CentaurMT", "Palatino Linotype", serif;
font-size: 0.85rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1.5px;
color: #c8a060;
text-align: center;
margin: 0 0 8px 0;
padding-bottom: 4px;
border-bottom: 1px solid rgba(180, 130, 40, 0.35);
text-shadow: 1px 1px 3px rgba(0,0,0,0.8);
}
.adversite-cards {
display: flex;
flex-direction: row;
gap: 8px;
.adversite-card {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
padding: 6px 4px 8px;
border-radius: 5px;
border: 1px solid rgba(100,80,40,0.4);
border-top: 3px solid rgba(100,80,40,0.6);
background: rgba(8,4,0,0.55);
transition: box-shadow 0.2s;
&:hover {
box-shadow: 0 0 10px rgba(200,160,60,0.2);
}
// Couleur par type
&.adversite-bleue {
border-top-color: #2255bb;
background: rgba(4, 8, 30, 0.65);
.adversite-card-title { color: #88aaff; }
}
&.adversite-rouge {
border-top-color: #aa1818;
background: rgba(30, 4, 4, 0.65);
.adversite-card-title { color: #ff8888; }
}
&.adversite-noire {
border-top-color: #555555;
background: rgba(12, 12, 12, 0.75);
.adversite-card-title { color: #aaaaaa; }
}
.adversite-card-title {
font-size: 0.62rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 1px;
text-shadow: 1px 1px 2px rgba(0,0,0,0.9);
}
.adversite-gem {
width: 52px;
height: 52px;
object-fit: contain;
filter: drop-shadow(0 2px 6px rgba(0,0,0,0.7));
transition: transform 0.15s, filter 0.15s;
&:hover {
transform: scale(1.06);
filter: drop-shadow(0 3px 10px rgba(180,140,60,0.5));
}
}
.adversite-value {
font-family: "Signika", "Arial Narrow", sans-serif;
font-variant-numeric: lining-nums tabular-nums;
font-size: 1.6rem;
font-weight: 900;
color: #f5e0c0;
text-shadow: 1px 1px 4px rgba(0,0,0,0.9);
line-height: 1;
min-height: 1.8rem;
display: flex;
align-items: center;
justify-content: center;
}
.adversite-controls {
display: flex;
gap: 6px;
align-items: center;
.adv-btn {
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
font-weight: 900;
border-radius: 4px;
border: 1px solid rgba(160,120,40,0.6);
background: linear-gradient(to bottom, rgba(60,35,8,0.9), rgba(30,15,3,0.9));
color: #d4aa60;
cursor: pointer;
transition: all 0.12s;
text-decoration: none;
line-height: 1;
user-select: none;
&:hover {
background: linear-gradient(to bottom, rgba(120,60,10,0.95), rgba(80,35,5,0.95));
border-color: rgba(220,170,50,0.8);
color: #ffe090;
transform: scale(1.1);
}
&:active {
transform: scale(0.92);
}
&.adv-minus { color: #ff9999; border-color: rgba(180,40,40,0.5); }
&.adv-plus { color: #99ffaa; border-color: rgba(40,160,60,0.5); }
}
}
}
}
.adversite-modifiers {
display: flex;
flex-direction: row;
gap: 8px;
margin-top: 8px;
padding-top: 6px;
border-top: 1px solid rgba(120,80,20,0.3);
.adversite-modifier-row {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
label {
font-size: 0.58rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
color: #9a7a50;
white-space: nowrap;
cursor: default;
}
input {
width: 40px;
height: 20px;
text-align: center;
font-size: 0.8rem;
font-weight: 600;
padding: 0 2px;
background: rgba(30,15,3,0.85);
border: 1px solid rgba(120,75,20,0.5);
border-radius: 2px;
color: #f0dfc0;
}
}
}
}
}
/* ==================== Creature Sheet Specific Styles ==================== */

View File

@@ -2388,6 +2388,7 @@ li {
/* ==================== Actor Sheet Styles ==================== */
.fvtt-mournblade-cyd-2-0.actor {
background: url("../assets/ui/pc_sheet_bg.webp") repeat;
/* ==================== Adversité Cards ==================== */
}
.fvtt-mournblade-cyd-2-0.actor .window-content {
height: 100%;
@@ -3080,6 +3081,171 @@ li {
margin: 0;
cursor: pointer;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section {
padding: 6px 8px 8px;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-section-title {
font-family: "CentaurMT", "Palatino Linotype", serif;
font-size: 0.85rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1.5px;
color: #c8a060;
text-align: center;
margin: 0 0 8px 0;
padding-bottom: 4px;
border-bottom: 1px solid rgba(180, 130, 40, 0.35);
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards {
display: flex;
flex-direction: row;
gap: 8px;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
padding: 6px 4px 8px;
border-radius: 5px;
border: 1px solid rgba(100, 80, 40, 0.4);
border-top: 3px solid rgba(100, 80, 40, 0.6);
background: rgba(8, 4, 0, 0.55);
transition: box-shadow 0.2s;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card:hover {
box-shadow: 0 0 10px rgba(200, 160, 60, 0.2);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card.adversite-bleue {
border-top-color: #2255bb;
background: rgba(4, 8, 30, 0.65);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card.adversite-bleue .adversite-card-title {
color: #88aaff;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card.adversite-rouge {
border-top-color: #aa1818;
background: rgba(30, 4, 4, 0.65);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card.adversite-rouge .adversite-card-title {
color: #ff8888;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card.adversite-noire {
border-top-color: #555555;
background: rgba(12, 12, 12, 0.75);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card.adversite-noire .adversite-card-title {
color: #aaaaaa;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-card-title {
font-size: 0.62rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 1px;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.9);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-gem {
width: 52px;
height: 52px;
object-fit: contain;
filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.7));
transition: transform 0.15s, filter 0.15s;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-gem:hover {
transform: scale(1.06);
filter: drop-shadow(0 3px 10px rgba(180, 140, 60, 0.5));
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-value {
font-family: "Signika", "Arial Narrow", sans-serif;
font-variant-numeric: lining-nums tabular-nums;
font-size: 1.6rem;
font-weight: 900;
color: #f5e0c0;
text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.9);
line-height: 1;
min-height: 1.8rem;
display: flex;
align-items: center;
justify-content: center;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-controls {
display: flex;
gap: 6px;
align-items: center;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-controls .adv-btn {
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
font-weight: 900;
border-radius: 4px;
border: 1px solid rgba(160, 120, 40, 0.6);
background: linear-gradient(to bottom, rgba(60, 35, 8, 0.9), rgba(30, 15, 3, 0.9));
color: #d4aa60;
cursor: pointer;
transition: all 0.12s;
text-decoration: none;
line-height: 1;
user-select: none;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-controls .adv-btn:hover {
background: linear-gradient(to bottom, rgba(120, 60, 10, 0.95), rgba(80, 35, 5, 0.95));
border-color: rgba(220, 170, 50, 0.8);
color: #ffe090;
transform: scale(1.1);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-controls .adv-btn:active {
transform: scale(0.92);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-controls .adv-btn.adv-minus {
color: #ff9999;
border-color: rgba(180, 40, 40, 0.5);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-cards .adversite-card .adversite-controls .adv-btn.adv-plus {
color: #99ffaa;
border-color: rgba(40, 160, 60, 0.5);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-modifiers {
display: flex;
flex-direction: row;
gap: 8px;
margin-top: 8px;
padding-top: 6px;
border-top: 1px solid rgba(120, 80, 20, 0.3);
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-modifiers .adversite-modifier-row {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-modifiers .adversite-modifier-row label {
font-size: 0.58rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
color: #9a7a50;
white-space: nowrap;
cursor: default;
}
.fvtt-mournblade-cyd-2-0.actor .adversite-section .adversite-modifiers .adversite-modifier-row input {
width: 40px;
height: 20px;
text-align: center;
font-size: 0.8rem;
font-weight: 600;
padding: 0 2px;
background: rgba(30, 15, 3, 0.85);
border: 1px solid rgba(120, 75, 20, 0.5);
border-radius: 2px;
color: #f0dfc0;
}
/* ==================== Creature Sheet Specific Styles ==================== */
.fvtt-mournblade-cyd-2-0.actor.creature-sheet .background-sheet-header-creature {
background: linear-gradient(135deg, rgba(0, 60, 0, 0.15) 0%, rgba(20, 80, 20, 0.1) 100%);

View File

@@ -156,35 +156,36 @@
</ul>
</div>
<div class="sheet-box color-bg-archetype">
<div class="sheet-box color-bg-archetype adversite-section">
<h4 class="item-name-label competence-name">Adversités</h4>
<ul class="item-list alternate-list">
<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 data-action="modifyAdversite" class="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>
</div>
<a data-action="modifyAdversite" class="plus-minus-button" data-adversite-value="1">+</a>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
</li>
{{/each}}
</ul>
</div>
{{#if isGM}}
<div class="flexrow">
<span class="item-name-label competence-name item-field-label-long" data-tooltip="Modificateur de Vigueur">Mod. de Vigueur</span>
<input type="text" class="item-field-label-short" name="system.sante.vigueurmodifier"
<div class="adversite-modifiers">
<div class="adversite-modifier-row">
<label data-tooltip="Modificateur de Vigueur">Mod. Vigueur</label>
<input type="text" name="system.sante.vigueurmodifier"
value="{{system.sante.vigueurmodifier}}" data-dtype="Number" />
</div>
<div class="flexrow">
<span class="item-name-label competence-name item-field-label-long" data-tooltip="Modificateur de Seuil de Pouvoir">Mod. de Seuil de Pouvoir</span>
<input type="text" class="item-field-label-short" name="system.ame.seuilpouvoirmodifier"
<div class="adversite-modifier-row">
<label data-tooltip="Modificateur de Seuil de Pouvoir">Mod. Seuil Pouvoir</label>
<input type="text" name="system.ame.seuilpouvoirmodifier"
value="{{system.ame.seuilpouvoirmodifier}}" data-dtype="Number" />
</div>
</div>
{{/if}}
</div>
</div>