Compare commits

..

5 Commits

Author SHA1 Message Date
6f8b165745 v14 fixes again
All checks were successful
Release Creation / build (release) Successful in 49s
2026-04-24 22:27:58 +02:00
c61179a790 Corrections sur commande /tirage
All checks were successful
Release Creation / build (release) Successful in 1m3s
2026-04-24 21:05:02 +02:00
956ed9e916 Corrections CSS sur fiche archetype et système
All checks were successful
Release Creation / build (release) Successful in 50s
2026-04-21 13:43:29 +02:00
5cc060b102 Foundryv14 migration 2026-04-01 22:21:54 +02:00
a816380679 Foundryv14 migration
All checks were successful
Release Creation / build (release) Successful in 47s
2026-04-01 21:57:26 +02:00
56 changed files with 220 additions and 234 deletions

View File

@@ -58,5 +58,5 @@ jobs:
version: ${{github.event.release.tag_name}}
manifest: 'https://www.uberwald.me/gitea/public/fvtt-malefices/releases/download/latest/system.json'
notes: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-malefices.zip'
compatibility-minimum: '11'
compatibility-verified: '13'
compatibility-minimum: '13'
compatibility-verified: '14'

8
.gitignore vendored
View File

@@ -1 +1,9 @@
# IDE
.idea/
.vs/
styles/*.css
# Node Modules
node_modules/
.github/

View File

@@ -4,71 +4,37 @@
src: url('../fonts/rivanna.ttf') format("truetype");
}
:root {
/* =================== 1. ACTOR SHEET FONT STYLES =========== */
--window-header-title-font-size: 1.3rem;
--window-header-title-font-weight: normal;
--window-header-title-color: #f5f5f5;
--major-button-font-size: 1.05rem;
--major-button-font-weight: normal;
--major-button-color: #dadada;
--tab-header-font-size: 1.0rem;
--tab-header-font-weight: 700;
--tab-header-color: #403f3e;
--tab-header-color-active: #4a0404;
--actor-input-font-size: 0.8rem;
--actor-input-font-weight: 500;
--actor-input-color: black;
--actor-label-font-size: 0.8rem;
--actor-label-font-weight: 700;
--actor-label-color: #464331c4;
/* =================== 2. DEBUGGING HIGHLIGHTERS ============ */
--debug-background-color-red: #ff000054;
--debug-background-color-blue: #1d00ff54;
--debug-background-color-green: #54ff0054;
--debug-box-shadow-red: inset 0 0 2px red;
--debug-box-shadow-blue: inset 0 0 2px blue;
--debug-box-shadow-green: inset 0 0 2px green;
}
/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/
/* Global styles & Font */
/* Global styles scoped to Maléfices windows only */
.fvtt-malefices .window-app {
text-align: justify;
font-size: 16px;
letter-spacing: 1px;
text-align: justify;
font-size: 16px;
letter-spacing: 1px;
}
/* Fonts */
.sheet header.sheet-header h1 input, .window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item {
font-size: 1.0rem;
} /* For title, sidebar character and scene */
/* Fonts — scoped to system sheets */
.fvtt-malefices .sheet header.sheet-header h1 input,
#actors .directory-list,
#navigation #scene-list .scene.nav-item {
font-size: 1.0rem;
}
.fvtt-malefices .sheet nav.sheet-tabs {
font-size: 0.8rem;
} /* For nav and title */
.window-app input, .fvtt-malefices .item-form, .sheet header.sheet-header .flex-group-center.flex-compteurs, .sheet header.sheet-header .flex-group-center.flex-fatigue, select, button, .item-checkbox, #sidebar, #players, #navigation #nav-toggle {
font-size: 0.8rem;
font-size: 0.8rem;
}
.fvtt-malefices .item-form,
.fvtt-malefices .sheet header.sheet-header .flex-group-center.flex-compteurs,
.fvtt-malefices .sheet header.sheet-header .flex-group-center.flex-fatigue,
.fvtt-malefices .item-checkbox,
#sidebar, #players, #navigation #nav-toggle {
font-size: 0.8rem;
}
.window-header{
background: rgba(0,0,0,0.75);
}
.window-app.sheet .window-content {
margin: 0;
padding: 0;
}
.strong-text{
.strong-text {
font-weight: bold;
}
.tabs .item.active, .blessures-list li ul li:first-child:hover, a:hover {
.fvtt-malefices .tabs .item.active,
.blessures-list li ul li:first-child:hover {
text-shadow: 1px 0px 0px @color-accent;
}
@@ -78,15 +44,15 @@ background: rgba(0,0,0,0.75);
cursor: pointer;
}
input:hover, select:hover {
.fvtt-malefices input:hover, .fvtt-malefices select:hover {
border-width: 4px;
border-color: rgb(85, 65, 130);
}
input:disabled {
.fvtt-malefices input:disabled {
color:#1c2058;
}
select:disabled {
.fvtt-malefices select:disabled {
color:#1c2058;
}
table {border: 1px solid #7a7971;}

View File

@@ -48,6 +48,15 @@
}
}
/* Description editor: ensure enough vertical room */
.tab.description {
prose-mirror,
.editor,
.ProseMirror {
min-height: 440px;
}
}
/* Header layout override for item sheets (smaller than actor sheet header) */
.sheet-header {
flex: 0 0 auto;

View File

@@ -204,23 +204,29 @@ li.folder > .folder-header h3 {
/*background: #494e6b;*/
}
input[type="text"], select[type="text"] {
.fvtt-malefices input[type="text"], .fvtt-malefices select[type="text"] {
background:white;
color: @color-input-text;
}
select {
.fvtt-malefices select {
background:white;
color: @color-input-text;
}
/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/
/*color: rgba(168, 139, 139, 0.5);*/
.window-app.sheet .window-content .sheet-header select[type="text"], .window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-body input[type="text"], .window-app.sheet .window-content .sheet-body input[type="number"], .window-app.sheet .window-content .sheet-body select[type="text"] {
.fvtt-malefices.window-app.sheet .window-content .sheet-header select[type="text"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="text"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="number"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="text"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="number"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body select[type="text"] {
color: @color-text;
/*color: #494e6b;*/
}
.window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] {
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="password"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="date"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="time"] {
color: @color-text;
background: @bg-sheet;
border: 1 none;
@@ -228,7 +234,9 @@ select {
margin-left: 2px;
}
.window-app.sheet .window-content .sheet-body input[type="password"], .window-app.sheet .window-content .sheet-body input[type="date"], .window-app.sheet .window-content .sheet-body input[type="time"] {
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="password"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="date"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="time"] {
color: @color-text;
background: @bg-sheet;
border: 1 none;
@@ -236,7 +244,8 @@ select {
margin-left: 2px;
}
.window-app.sheet .window-content .sheet-body select, .window-app.sheet .window-content .sheet-header select {
.fvtt-malefices.window-app.sheet .window-content .sheet-body select,
.fvtt-malefices.window-app.sheet .window-content .sheet-header select {
color: @color-text;
background: #fff;
border: 1 none;
@@ -262,7 +271,7 @@ section.sheet-body{padding: 0.25rem 0.5rem;}
padding: 0;
}
nav.sheet-tabs {
.fvtt-malefices nav.sheet-tabs {
font-size: @tab-font-size;
font-weight: bold;
height: @tab-height;
@@ -289,7 +298,7 @@ nav.sheet-tabs {
color: #6d5923 !important;
}
nav.sheet-tabs .item {
.fvtt-malefices nav.sheet-tabs .item {
position: relative;
padding: 0 0.25rem;
color: @color-tab-text;
@@ -297,7 +306,7 @@ nav.sheet-tabs .item {
margin-bottom: 4px;
}
nav.sheet-tabs .item:after {
.fvtt-malefices nav.sheet-tabs .item:after {
content: "";
position: absolute;
top: 0;

View File

@@ -29,7 +29,8 @@ export default class MaleficesArchetypeSheet extends MaleficesItemSheet {
async _prepareContext() {
const context = await super._prepareContext()
context.tabs = this.#getTabs()
context.tarots = MaleficesUtility.getTarots()
const tarots = MaleficesUtility.getTarots() ?? []
context.tarots = Object.fromEntries(tarots.map(t => [t._id, t.name]))
return context
}
}

View File

@@ -43,10 +43,6 @@ export class MaleficesActor extends Actor {
return super.create(data, options);
}
/* -------------------------------------------- */
prepareBaseData() {
}
/* -------------------------------------------- */
async prepareData() {
@@ -92,7 +88,7 @@ export class MaleficesActor extends Actor {
return comp;
}
getArchetype() {
let comp = foundry.utils.duplicate(this.items.find(item => item.type == 'archetype') || {name: "Pas d'archetype"})
let comp = foundry.utils.duplicate(this.items.find(item => item.type == 'archetype') || { name: "Pas d'archetype" })
if (comp && comp.system) {
comp.tarot = MaleficesUtility.getTarot(comp.system.lametutelaire)
}
@@ -224,13 +220,13 @@ export class MaleficesActor extends Actor {
}
/* -------------------------------------------- */
clearInitiative(){
clearInitiative() {
this.getFlag("world", "initiative", -1)
}
/* -------------------------------------------- */
getInitiativeScore(combatId, combatantId) {
let init = Math.floor( (this.system.attributs.physique.value+this.system.attributs.habilite.value) / 2)
let subvalue = new Roll("1d20").roll({async: false})
let init = Math.floor((this.system.attributs.physique.value + this.system.attributs.habilite.value) / 2)
let subvalue = new Roll("1d20").roll({ async: false })
return init + (subvalue.total / 100)
}
@@ -275,25 +271,25 @@ export class MaleficesActor extends Actor {
/* -------------------------------------------- */
incDecFluide(value) {
let fluide = this.system.fluide + value
this.update( {'system.fluide': fluide} )
this.update({ 'system.fluide': fluide })
}
incDecDestin(value) {
let destin = this.system.pointdestin + value
this.update( {'system.pointdestin': destin} )
this.update({ 'system.pointdestin': destin })
}
incDecMPMB(value) {
let mpmb = this.system.mpmb + value
this.update( {'system.mpmb': mpmb} )
this.update({ 'system.mpmb': mpmb })
}
incDecMPMN(value) {
let mpmn = this.system.mpmn + value
this.update( {'system.mpmn': mpmn} )
this.update({ 'system.mpmn': mpmn })
}
/* -------------------------------------------- */
incDecAttr(attrKey, value) {
let attr = foundry.utils.duplicate(this.system.attributs[attrKey])
attr.value += value
this.update( { [`system.attributs.${attrKey}`]: attr})
this.update({ [`system.attributs.${attrKey}`]: attr })
}
/* -------------------------------------------- */
async incDecQuantity(objetId, incDec = 0) {
@@ -317,14 +313,14 @@ export class MaleficesActor extends Actor {
}
/* -------------------------------------------- */
getAtttributImage( attrKey) {
getAtttributImage(attrKey) {
return `systems/fvtt-malefices/images/icons/${attrKey}.webp`
}
/* -------------------------------------------- */
incDecDestin( value) {
let newValue = Math.max( this.system.pointdestin + value, 0)
this.update( {'system.pointdestin': newValue})
incDecDestin(value) {
let newValue = Math.max(this.system.pointdestin + value, 0)
this.update({ 'system.pointdestin': newValue })
}
/* -------------------------------------------- */
@@ -349,7 +345,7 @@ export class MaleficesActor extends Actor {
}
/* -------------------------------------------- */
getPhysiqueMalus() {
if ( this.system.attributs.constitution.value <= 8) {
if (this.system.attributs.constitution.value <= 8) {
return -(9 - this.system.attributs.constitution.value)
}
return 0
@@ -373,7 +369,7 @@ export class MaleficesActor extends Actor {
arme = foundry.utils.duplicate(arme)
let rollData = this.getCommonRollData()
if (arme.system.armetype == "mainsnues" || arme.system.armetype == "epee") {
rollData.attr = { label: "(Physique+Habilité)/2", value: Math.floor( (this.getPhysiqueMalus()+this.system.attributs.physique.value+this.system.attributs.habilite.value) / 2) }
rollData.attr = { label: "(Physique+Habilité)/2", value: Math.floor((this.getPhysiqueMalus() + this.system.attributs.physique.value + this.system.attributs.habilite.value) / 2) }
} else {
rollData.attr = foundry.utils.duplicate(this.system.attributs.habilite)
}

View File

@@ -131,10 +131,12 @@ Hooks.once("ready", function () {
/* Foundry VTT Initialization */
/* -------------------------------------------- */
Hooks.on("chatMessage", (html, content, msg) => {
if (content[0] == '/') {
// In Foundry v14+, ProseMirror wraps message in <p>...</p> — strip it like ChatLog.parse does
const stripped = content.replace(/^<p>|<\/p>$/gi, "").trim();
if (stripped[0] === '/') {
let regExp = /(\S+)/g;
let commands = content.match(regExp);
if (game.system.malefices.commands.processChatCommand(commands, content, msg)) {
let commands = stripped.match(regExp);
if (game.system.malefices.commands.processChatCommand(commands, stripped, msg)) {
return false;
}
}

View File

@@ -7,7 +7,7 @@ export class MaleficesUtility {
/* -------------------------------------------- */
static async init() {
Hooks.on('renderChatLog', (log, html, data) => MaleficesUtility.chatListeners(html));
Hooks.on('renderChatMessageHTML', (message, html) => MaleficesUtility.chatListeners(message, html));
this.rollDataStore = {}
this.defenderStore = {}
@@ -73,7 +73,7 @@ export class MaleficesUtility {
/*-------------------------------------------- */
static getTarots() {
return foundry.utils.duplicate(this.tarots)
return foundry.utils.duplicate(this.tarots ?? [])
}
static getTarot(tId) {
return this.tarots.find(t => t._id == tId)
@@ -105,29 +105,32 @@ export class MaleficesUtility {
/* -------------------------------------------- */
static drawDeckCard(msgId) {
if (game.user.isGM) {
game.system.malefices.currentTirage.addCard(msgId)
const tirage = game.system.malefices.currentTirage
if (tirage) {
tirage.addCard(msgId)
} else {
ui.notifications.warn("Aucun tirage en cours.")
}
} else {
game.socket.emit("system.fvtt-malefices", { name: "msg-draw-card", data: { msgId: msgId } })
}
}
/* -------------------------------------------- */
static async chatListeners(html) {
static chatListeners(message, html) {
if (!html) return
$(html).on("click", '.roll-destin', event => {
let messageId = MaleficesUtility.findChatMessageId(event.currentTarget)
let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "rolldata")
let actor = this.getActorFromRollData(rollData)
html.querySelector('.roll-destin')?.addEventListener('click', () => {
const rollData = message.getFlag("world", "rolldata")
const actor = MaleficesUtility.getActorFromRollData(rollData)
actor.incDecDestin(-1)
rollData.isReroll = true
this.rollMalefices(rollData)
})
$(html).on("click", '.draw-tarot-card', event => {
let messageId = MaleficesUtility.findChatMessageId(event.currentTarget)
this.drawDeckCard(messageId)
MaleficesUtility.rollMalefices(rollData)
})
html.querySelector('.draw-tarot-card')?.addEventListener('click', () => {
MaleficesUtility.drawDeckCard(message.id)
})
}
/* -------------------------------------------- */

View File

@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000004

View File

@@ -1,7 +1,16 @@
2026/02/27-10:28:01.892467 7f56f8bfd6c0 Recovering log #63
2026/02/27-10:28:01.948160 7f56f8bfd6c0 Delete type=0 #63
2026/02/27-10:28:01.948272 7f56f8bfd6c0 Delete type=3 #62
2026/02/27-14:29:37.861283 7f54e37ef6c0 Level-0 table #67: started
2026/02/27-14:29:37.861314 7f54e37ef6c0 Level-0 table #67: 0 bytes OK
2026/02/27-14:29:37.867488 7f54e37ef6c0 Delete type=0 #65
2026/02/27-14:29:37.880370 7f54e37ef6c0 Manual compaction at level-0 from '!items!2HWSdXDSFei9KC6y' @ 72057594037927935 : 1 .. '!items!xtYE2kVIfNtrXSoU' @ 0 : 0; will stop at (end)
2026/04/24-22:24:59.171196 7f57a57ee6c0 Recovering log #3
2026/04/24-22:24:59.171446 7f57a57ee6c0 Level-0 table #5: started
2026/04/24-22:24:59.188279 7f57a57ee6c0 Level-0 table #5: 49972 bytes OK
2026/04/24-22:24:59.232997 7f57a57ee6c0 Delete type=0 #3
2026/04/24-22:24:59.233084 7f57a57ee6c0 Delete type=3 #2
2026/04/24-22:27:28.425927 7f57977fe6c0 Level-0 table #8: started
2026/04/24-22:27:28.430469 7f57977fe6c0 Level-0 table #8: 50829 bytes OK
2026/04/24-22:27:28.436422 7f57977fe6c0 Delete type=0 #6
2026/04/24-22:27:28.465787 7f57977fe6c0 Manual compaction at level-0 from '!items!2HWSdXDSFei9KC6y' @ 72057594037927935 : 1 .. '!items!xtYE2kVIfNtrXSoU' @ 0 : 0; will stop at '!items!xtYE2kVIfNtrXSoU' @ 23 : 1
2026/04/24-22:27:28.465795 7f57977fe6c0 Compacting 2@0 + 0@1 files
2026/04/24-22:27:28.469433 7f57977fe6c0 Generated table #9@0: 23 keys, 50829 bytes
2026/04/24-22:27:28.469455 7f57977fe6c0 Compacted 2@0 + 0@1 files => 50829 bytes
2026/04/24-22:27:28.476490 7f57977fe6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2026/04/24-22:27:28.476684 7f57977fe6c0 Delete type=2 #5
2026/04/24-22:27:28.476866 7f57977fe6c0 Delete type=2 #8
2026/04/24-22:27:28.476999 7f57977fe6c0 Manual compaction at level-0 from '!items!xtYE2kVIfNtrXSoU' @ 23 : 1 .. '!items!xtYE2kVIfNtrXSoU' @ 0 : 0; will stop at (end)

View File

@@ -1,3 +1 @@
2026/02/27-00:10:01.008967 7fbc5bfff6c0 Recovering log #60
2026/02/27-00:10:01.061613 7fbc5bfff6c0 Delete type=3 #58
2026/02/27-00:10:01.061695 7fbc5bfff6c0 Delete type=0 #60
2026/04/24-22:22:27.429550 7fcbf37fe6c0 Delete type=3 #1

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000004

View File

@@ -1,7 +1,16 @@
2026/02/27-10:28:01.832073 7f56f93fe6c0 Recovering log #63
2026/02/27-10:28:01.886020 7f56f93fe6c0 Delete type=0 #63
2026/02/27-10:28:01.886089 7f56f93fe6c0 Delete type=3 #62
2026/02/27-14:29:37.854040 7f54e37ef6c0 Level-0 table #67: started
2026/02/27-14:29:37.854089 7f54e37ef6c0 Level-0 table #67: 0 bytes OK
2026/02/27-14:29:37.861166 7f54e37ef6c0 Delete type=0 #65
2026/02/27-14:29:37.880355 7f54e37ef6c0 Manual compaction at level-0 from '!items!5J6qIaWdnhEGMAXJ' @ 72057594037927935 : 1 .. '!items!nkRQU81L1gWOfaeo' @ 0 : 0; will stop at (end)
2026/04/24-22:24:59.115818 7f57a4fed6c0 Recovering log #3
2026/04/24-22:24:59.115867 7f57a4fed6c0 Level-0 table #5: started
2026/04/24-22:24:59.136445 7f57a4fed6c0 Level-0 table #5: 1991 bytes OK
2026/04/24-22:24:59.169110 7f57a4fed6c0 Delete type=0 #3
2026/04/24-22:24:59.169225 7f57a4fed6c0 Delete type=3 #2
2026/04/24-22:27:28.406907 7f57977fe6c0 Level-0 table #8: started
2026/04/24-22:27:28.410027 7f57977fe6c0 Level-0 table #8: 2085 bytes OK
2026/04/24-22:27:28.416047 7f57977fe6c0 Delete type=0 #6
2026/04/24-22:27:28.446021 7f57977fe6c0 Manual compaction at level-0 from '!items!5J6qIaWdnhEGMAXJ' @ 72057594037927935 : 1 .. '!items!nkRQU81L1gWOfaeo' @ 0 : 0; will stop at '!items!nkRQU81L1gWOfaeo' @ 9 : 1
2026/04/24-22:27:28.446030 7f57977fe6c0 Compacting 2@0 + 0@1 files
2026/04/24-22:27:28.449382 7f57977fe6c0 Generated table #9@0: 9 keys, 2085 bytes
2026/04/24-22:27:28.449407 7f57977fe6c0 Compacted 2@0 + 0@1 files => 2085 bytes
2026/04/24-22:27:28.456221 7f57977fe6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2026/04/24-22:27:28.456392 7f57977fe6c0 Delete type=2 #5
2026/04/24-22:27:28.456494 7f57977fe6c0 Delete type=2 #8
2026/04/24-22:27:28.476974 7f57977fe6c0 Manual compaction at level-0 from '!items!nkRQU81L1gWOfaeo' @ 9 : 1 .. '!items!nkRQU81L1gWOfaeo' @ 0 : 0; will stop at (end)

View File

@@ -1,3 +1 @@
2026/02/27-00:10:00.951941 7fbc5b7fe6c0 Recovering log #60
2026/02/27-00:10:01.006960 7fbc5b7fe6c0 Delete type=3 #58
2026/02/27-00:10:01.007022 7fbc5b7fe6c0 Delete type=0 #60
2026/04/24-22:22:27.427665 7fcbf37fe6c0 Delete type=3 #1

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000004

View File

@@ -1,7 +1,16 @@
2026/02/27-10:28:01.956384 7f56e3fff6c0 Recovering log #63
2026/02/27-10:28:02.013265 7f56e3fff6c0 Delete type=0 #63
2026/02/27-10:28:02.013323 7f56e3fff6c0 Delete type=3 #62
2026/02/27-14:29:37.873932 7f54e37ef6c0 Level-0 table #67: started
2026/02/27-14:29:37.873976 7f54e37ef6c0 Level-0 table #67: 0 bytes OK
2026/02/27-14:29:37.880214 7f54e37ef6c0 Delete type=0 #65
2026/02/27-14:29:37.880389 7f54e37ef6c0 Manual compaction at level-0 from '!macros!ESV4er8Hy6liMOC3' @ 72057594037927935 : 1 .. '!macros!zDPgmHiwNxBWhoYz' @ 0 : 0; will stop at (end)
2026/04/24-22:24:59.235537 7f57a4fed6c0 Recovering log #3
2026/04/24-22:24:59.235607 7f57a4fed6c0 Level-0 table #5: started
2026/04/24-22:24:59.258336 7f57a4fed6c0 Level-0 table #5: 803 bytes OK
2026/04/24-22:24:59.302049 7f57a4fed6c0 Delete type=0 #3
2026/04/24-22:24:59.302122 7f57a4fed6c0 Delete type=3 #2
2026/04/24-22:27:28.416201 7f57977fe6c0 Level-0 table #8: started
2026/04/24-22:27:28.419304 7f57977fe6c0 Level-0 table #8: 844 bytes OK
2026/04/24-22:27:28.425776 7f57977fe6c0 Delete type=0 #6
2026/04/24-22:27:28.456560 7f57977fe6c0 Manual compaction at level-0 from '!macros!ESV4er8Hy6liMOC3' @ 72057594037927935 : 1 .. '!macros!zDPgmHiwNxBWhoYz' @ 0 : 0; will stop at '!macros!zDPgmHiwNxBWhoYz' @ 3 : 1
2026/04/24-22:27:28.456571 7f57977fe6c0 Compacting 2@0 + 0@1 files
2026/04/24-22:27:28.459693 7f57977fe6c0 Generated table #9@0: 3 keys, 844 bytes
2026/04/24-22:27:28.459721 7f57977fe6c0 Compacted 2@0 + 0@1 files => 844 bytes
2026/04/24-22:27:28.465548 7f57977fe6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2026/04/24-22:27:28.465648 7f57977fe6c0 Delete type=2 #5
2026/04/24-22:27:28.465738 7f57977fe6c0 Delete type=2 #8
2026/04/24-22:27:28.476986 7f57977fe6c0 Manual compaction at level-0 from '!macros!zDPgmHiwNxBWhoYz' @ 3 : 1 .. '!macros!zDPgmHiwNxBWhoYz' @ 0 : 0; will stop at (end)

View File

@@ -1,3 +1 @@
2026/02/27-00:10:01.064062 7fbc5affd6c0 Recovering log #60
2026/02/27-00:10:01.123843 7fbc5affd6c0 Delete type=3 #58
2026/02/27-00:10:01.123915 7fbc5affd6c0 Delete type=0 #60
2026/04/24-22:22:27.431094 7fcbf37fe6c0 Delete type=3 #1

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
MANIFEST-000064
MANIFEST-000004

View File

@@ -1,7 +1,16 @@
2026/02/27-10:28:01.770730 7f56f9bff6c0 Recovering log #63
2026/02/27-10:28:01.825327 7f56f9bff6c0 Delete type=0 #63
2026/02/27-10:28:01.825401 7f56f9bff6c0 Delete type=3 #62
2026/02/27-14:29:37.867627 7f54e37ef6c0 Level-0 table #67: started
2026/02/27-14:29:37.867663 7f54e37ef6c0 Level-0 table #67: 0 bytes OK
2026/02/27-14:29:37.873757 7f54e37ef6c0 Delete type=0 #65
2026/02/27-14:29:37.880380 7f54e37ef6c0 Manual compaction at level-0 from '!items!1DRKmbzGzbCRCswc' @ 72057594037927935 : 1 .. '!items!zbGGMEQFdwVdlKAf' @ 0 : 0; will stop at (end)
2026/04/24-22:24:59.055819 7f5797fff6c0 Recovering log #3
2026/04/24-22:24:59.055873 7f5797fff6c0 Level-0 table #5: started
2026/04/24-22:24:59.074116 7f5797fff6c0 Level-0 table #5: 3817 bytes OK
2026/04/24-22:24:59.112929 7f5797fff6c0 Delete type=0 #3
2026/04/24-22:24:59.112993 7f5797fff6c0 Delete type=3 #2
2026/04/24-22:27:28.396493 7f57977fe6c0 Level-0 table #8: started
2026/04/24-22:27:28.400076 7f57977fe6c0 Level-0 table #8: 4076 bytes OK
2026/04/24-22:27:28.406770 7f57977fe6c0 Delete type=0 #6
2026/04/24-22:27:28.436577 7f57977fe6c0 Manual compaction at level-0 from '!items!1DRKmbzGzbCRCswc' @ 72057594037927935 : 1 .. '!items!zbGGMEQFdwVdlKAf' @ 0 : 0; will stop at '!items!zbGGMEQFdwVdlKAf' @ 22 : 1
2026/04/24-22:27:28.436587 7f57977fe6c0 Compacting 2@0 + 0@1 files
2026/04/24-22:27:28.439689 7f57977fe6c0 Generated table #9@0: 22 keys, 4076 bytes
2026/04/24-22:27:28.439755 7f57977fe6c0 Compacted 2@0 + 0@1 files => 4076 bytes
2026/04/24-22:27:28.445747 7f57977fe6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2026/04/24-22:27:28.445870 7f57977fe6c0 Delete type=2 #5
2026/04/24-22:27:28.445963 7f57977fe6c0 Delete type=2 #8
2026/04/24-22:27:28.476959 7f57977fe6c0 Manual compaction at level-0 from '!items!zbGGMEQFdwVdlKAf' @ 22 : 1 .. '!items!zbGGMEQFdwVdlKAf' @ 0 : 0; will stop at (end)

View File

@@ -1,3 +1 @@
2026/02/27-00:10:00.890338 7fbca89ff6c0 Recovering log #60
2026/02/27-00:10:00.949636 7fbca89ff6c0 Delete type=3 #58
2026/02/27-00:10:00.949712 7fbca89ff6c0 Delete type=0 #60
2026/04/24-22:22:27.425195 7fcbf37fe6c0 Delete type=3 #1

Binary file not shown.

View File

@@ -3,76 +3,35 @@
font-family: "Rivanna";
src: url('../fonts/rivanna.ttf') format("truetype");
}
:root {
/* =================== 1. ACTOR SHEET FONT STYLES =========== */
--window-header-title-font-size: 1.3rem;
--window-header-title-font-weight: normal;
--window-header-title-color: #f5f5f5;
--major-button-font-size: 1.05rem;
--major-button-font-weight: normal;
--major-button-color: #dadada;
--tab-header-font-size: 1rem;
--tab-header-font-weight: 700;
--tab-header-color: #403f3e;
--tab-header-color-active: #4a0404;
--actor-input-font-size: 0.8rem;
--actor-input-font-weight: 500;
--actor-input-color: black;
--actor-label-font-size: 0.8rem;
--actor-label-font-weight: 700;
--actor-label-color: #464331c4;
/* =================== 2. DEBUGGING HIGHLIGHTERS ============ */
--debug-background-color-red: #ff000054;
--debug-background-color-blue: #1d00ff54;
--debug-background-color-green: #54ff0054;
--debug-box-shadow-red: inset 0 0 2px red;
--debug-box-shadow-blue: inset 0 0 2px blue;
--debug-box-shadow-green: inset 0 0 2px green;
}
/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/
/* Global styles & Font */
/* Global styles scoped to Maléfices windows only */
.fvtt-malefices .window-app {
text-align: justify;
font-size: 16px;
letter-spacing: 1px;
}
/* Fonts */
.sheet header.sheet-header h1 input,
.window-app .window-header,
/* Fonts — scoped to system sheets */
.fvtt-malefices .sheet header.sheet-header h1 input,
#actors .directory-list,
#navigation #scene-list .scene.nav-item {
font-size: 1rem;
}
/* For title, sidebar character and scene */
.fvtt-malefices .sheet nav.sheet-tabs {
font-size: 0.8rem;
}
/* For nav and title */
.window-app input,
.fvtt-malefices .item-form,
.sheet header.sheet-header .flex-group-center.flex-compteurs,
.sheet header.sheet-header .flex-group-center.flex-fatigue,
select,
button,
.item-checkbox,
.fvtt-malefices .sheet header.sheet-header .flex-group-center.flex-compteurs,
.fvtt-malefices .sheet header.sheet-header .flex-group-center.flex-fatigue,
.fvtt-malefices .item-checkbox,
#sidebar,
#players,
#navigation #nav-toggle {
font-size: 0.8rem;
}
.window-header {
background: rgba(0, 0, 0, 0.75);
}
.window-app.sheet .window-content {
margin: 0;
padding: 0;
}
.strong-text {
font-weight: bold;
}
.tabs .item.active,
.blessures-list li ul li:first-child:hover,
a:hover {
.fvtt-malefices .tabs .item.active,
.blessures-list li ul li:first-child:hover {
text-shadow: 1px 0px 0px #ff6600;
}
.rollable:hover,
@@ -81,15 +40,15 @@ a:hover {
text-shadow: 0 0 10px red;
cursor: pointer;
}
input:hover,
select:hover {
.fvtt-malefices input:hover,
.fvtt-malefices select:hover {
border-width: 4px;
border-color: #554182;
}
input:disabled {
.fvtt-malefices input:disabled {
color: #1c2058;
}
select:disabled {
.fvtt-malefices select:disabled {
color: #1c2058;
}
table {
@@ -365,46 +324,45 @@ li.folder > .folder-header h3 {
background: url("../images/ui/background_01_clear.webp");
/*background: #494e6b;*/
}
input[type="text"],
select[type="text"] {
.fvtt-malefices input[type="text"],
.fvtt-malefices select[type="text"] {
background: white;
color: #494e6b;
}
select {
.fvtt-malefices select {
background: white;
color: #494e6b;
}
/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/
/*color: rgba(168, 139, 139, 0.5);*/
.window-app.sheet .window-content .sheet-header select[type="text"],
.window-app.sheet .window-content .sheet-header input[type="text"],
.window-app.sheet .window-content .sheet-header input[type="number"],
.window-app.sheet .window-content .sheet-body input[type="text"],
.window-app.sheet .window-content .sheet-body input[type="number"],
.window-app.sheet .window-content .sheet-body select[type="text"] {
.fvtt-malefices.window-app.sheet .window-content .sheet-header select[type="text"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="text"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="number"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="text"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="number"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body select[type="text"] {
color: rgba(19, 18, 18, 0.95);
/*color: #494e6b;*/
}
.window-app.sheet .window-content .sheet-header input[type="password"],
.window-app.sheet .window-content .sheet-header input[type="date"],
.window-app.sheet .window-content .sheet-header input[type="time"] {
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="password"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="date"],
.fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="time"] {
color: rgba(19, 18, 18, 0.95);
background: url("../images/ui/background_01_clear.webp");
border: 1 none;
margin-bottom: 0.25rem;
margin-left: 2px;
}
.window-app.sheet .window-content .sheet-body input[type="password"],
.window-app.sheet .window-content .sheet-body input[type="date"],
.window-app.sheet .window-content .sheet-body input[type="time"] {
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="password"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="date"],
.fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="time"] {
color: rgba(19, 18, 18, 0.95);
background: url("../images/ui/background_01_clear.webp");
border: 1 none;
margin-bottom: 0.25rem;
margin-left: 2px;
}
.window-app.sheet .window-content .sheet-body select,
.window-app.sheet .window-content .sheet-header select {
.fvtt-malefices.window-app.sheet .window-content .sheet-body select,
.fvtt-malefices.window-app.sheet .window-content .sheet-header select {
color: rgba(19, 18, 18, 0.95);
background: #fff;
border: 1 none;
@@ -428,7 +386,7 @@ section.sheet-body {
margin: 0.5rem 0 0.5rem 0.5rem;
padding: 0;
}
nav.sheet-tabs {
.fvtt-malefices nav.sheet-tabs {
font-size: 1.2rem;
font-weight: bold;
height: 3rem;
@@ -453,14 +411,14 @@ nav.sheet-tabs {
.dice-tray button {
color: #6d5923 !important;
}
nav.sheet-tabs .item {
.fvtt-malefices nav.sheet-tabs .item {
position: relative;
padding: 0 0.25rem;
color: beige;
margin-top: 4px;
margin-bottom: 4px;
}
nav.sheet-tabs .item:after {
.fvtt-malefices nav.sheet-tabs .item:after {
content: "";
position: absolute;
top: 0;
@@ -1957,6 +1915,7 @@ li {
/* Fixed header bar */
/* sheet-body: scroll container */
/* Override legacy height: 100% on tab divs; hide all tabs, show only the active one */
/* Description editor: ensure enough vertical room */
/* Header layout override for item sheets (smaller than actor sheet header) */
/* Tab navigation: AppV2 uses nav.tabs (not nav.sheet-tabs) */
}
@@ -1990,6 +1949,11 @@ li {
.fvtt-malefices.item .tab[data-tab].active {
display: block;
}
.fvtt-malefices.item .tab.description prose-mirror,
.fvtt-malefices.item .tab.description .editor,
.fvtt-malefices.item .tab.description .ProseMirror {
min-height: 440px;
}
.fvtt-malefices.item .sheet-header {
flex: 0 0 auto;
flex-direction: row;

File diff suppressed because one or more lines are too long

View File

@@ -70,8 +70,8 @@
"license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-malefices/raw/branch/master/system.json",
"compatibility": {
"minimum": "11",
"verified": "13"
"minimum": "13",
"verified": "14"
},
"id": "fvtt-malefices",
"primaryTokenAttribute": "secondary.health",

View File

@@ -14,7 +14,7 @@
<li class="flexrow">
<label class="item-field-label-long">Lame tutélaire</label>
<select class="item-field-label-long" name="system.lametutelaire" data-dtype="String">
{{selectOptions tarots selected=system.lametutelaire nameAttr="_id" labelAttr="name"}}
{{selectOptions tarots selected=system.lametutelaire blank="— aucune —"}}
</select>
</li>
</ul>