Compare commits

..

5 Commits

Author SHA1 Message Date
uberwald 883a84b7a0 Affichage des cartes améliorés dans la vue /tirage
Release Creation / build (release) Successful in 48s
2026-04-26 15:50:51 +02:00
uberwald 6f8b165745 v14 fixes again
Release Creation / build (release) Successful in 49s
2026-04-24 22:27:58 +02:00
uberwald c61179a790 Corrections sur commande /tirage
Release Creation / build (release) Successful in 1m3s
2026-04-24 21:05:02 +02:00
uberwald 956ed9e916 Corrections CSS sur fiche archetype et système
Release Creation / build (release) Successful in 50s
2026-04-21 13:43:29 +02:00
uberwald 5cc060b102 Foundryv14 migration 2026-04-01 22:21:54 +02:00
56 changed files with 285 additions and 248 deletions
+2 -2
View File
@@ -58,5 +58,5 @@ jobs:
version: ${{github.event.release.tag_name}} version: ${{github.event.release.tag_name}}
manifest: 'https://www.uberwald.me/gitea/public/fvtt-malefices/releases/download/latest/system.json' 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' notes: 'https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-malefices.zip'
compatibility-minimum: '11' compatibility-minimum: '13'
compatibility-verified: '13' compatibility-verified: '14'
+8
View File
@@ -1 +1,9 @@
# IDE
.idea/
.vs/
styles/*.css
# Node Modules
node_modules/ node_modules/
.github/
+24 -58
View File
@@ -4,71 +4,37 @@
src: url('../fonts/rivanna.ttf') format("truetype"); 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; /* Global styles scoped to Maléfices windows only */
--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 */
.fvtt-malefices .window-app { .fvtt-malefices .window-app {
text-align: justify; text-align: justify;
font-size: 16px; font-size: 16px;
letter-spacing: 1px; letter-spacing: 1px;
} }
/* Fonts */ /* Fonts — scoped to system sheets */
.sheet header.sheet-header h1 input, .window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item { .fvtt-malefices .sheet header.sheet-header h1 input,
font-size: 1.0rem; #actors .directory-list,
} /* For title, sidebar character and scene */ #navigation #scene-list .scene.nav-item {
font-size: 1.0rem;
}
.fvtt-malefices .sheet nav.sheet-tabs { .fvtt-malefices .sheet nav.sheet-tabs {
font-size: 0.8rem; 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 { .fvtt-malefices .item-form,
font-size: 0.8rem; .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{ .strong-text {
background: rgba(0,0,0,0.75);
}
.window-app.sheet .window-content {
margin: 0;
padding: 0;
}
.strong-text{
font-weight: bold; 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; text-shadow: 1px 0px 0px @color-accent;
} }
@@ -78,15 +44,15 @@ background: rgba(0,0,0,0.75);
cursor: pointer; cursor: pointer;
} }
input:hover, select:hover { .fvtt-malefices input:hover, .fvtt-malefices select:hover {
border-width: 4px; border-width: 4px;
border-color: rgb(85, 65, 130); border-color: rgb(85, 65, 130);
} }
input:disabled { .fvtt-malefices input:disabled {
color:#1c2058; color:#1c2058;
} }
select:disabled { .fvtt-malefices select:disabled {
color:#1c2058; color:#1c2058;
} }
table {border: 1px solid #7a7971;} table {border: 1px solid #7a7971;}
+24 -13
View File
@@ -391,24 +391,11 @@
width: 100px; width: 100px;
vertical-align: top; vertical-align: top;
&:hover {
position: relative;
z-index: 100;
.tirage-card-img {
transform: scale(2.2);
transform-origin: center top;
box-shadow: 3px 3px 12px rgba(0,0,0,0.4);
}
}
.tirage-card-img { .tirage-card-img {
width: 100px; width: 100px;
border: 1px solid @be-gold-border; border: 1px solid @be-gold-border;
border-radius: 2px; border-radius: 2px;
box-shadow: 1px 1px 4px rgba(0,0,0,0.2); box-shadow: 1px 1px 4px rgba(0,0,0,0.2);
transition: transform 0.2s ease, box-shadow 0.2s ease;
transform-origin: center center;
cursor: zoom-in; cursor: zoom-in;
} }
@@ -467,3 +454,27 @@
} }
} }
} }
// ── Overlay loupe pour les cartes du tirage ───────────────
#tirage-card-zoom-overlay {
position: fixed;
z-index: 10000;
pointer-events: none;
border: 2px solid @be-gold-border;
border-radius: 3px;
box-shadow: 4px 4px 20px rgba(0,0,0,0.55);
opacity: 0;
transition: opacity 0.15s ease;
background: #000;
&.visible { opacity: 1; }
img {
display: block;
width: 220px;
height: auto;
border-radius: 2px;
&.flip-tarot { transform: scaleY(-1); }
}
}
+9
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) */ /* Header layout override for item sheets (smaller than actor sheet header) */
.sheet-header { .sheet-header {
flex: 0 0 auto; flex: 0 0 auto;
+19 -10
View File
@@ -204,23 +204,29 @@ li.folder > .folder-header h3 {
/*background: #494e6b;*/ /*background: #494e6b;*/
} }
input[type="text"], select[type="text"] { .fvtt-malefices input[type="text"], .fvtt-malefices select[type="text"] {
background:white; background:white;
color: @color-input-text; color: @color-input-text;
} }
select { .fvtt-malefices select {
background:white; background:white;
color: @color-input-text; color: @color-input-text;
} }
/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/ /* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/
/*color: rgba(168, 139, 139, 0.5);*/ /*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: @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; color: @color-text;
background: @bg-sheet; background: @bg-sheet;
border: 1 none; border: 1 none;
@@ -228,7 +234,9 @@ select {
margin-left: 2px; 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; color: @color-text;
background: @bg-sheet; background: @bg-sheet;
border: 1 none; border: 1 none;
@@ -236,7 +244,8 @@ select {
margin-left: 2px; 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; color: @color-text;
background: #fff; background: #fff;
border: 1 none; border: 1 none;
@@ -262,7 +271,7 @@ section.sheet-body{padding: 0.25rem 0.5rem;}
padding: 0; padding: 0;
} }
nav.sheet-tabs { .fvtt-malefices nav.sheet-tabs {
font-size: @tab-font-size; font-size: @tab-font-size;
font-weight: bold; font-weight: bold;
height: @tab-height; height: @tab-height;
@@ -289,7 +298,7 @@ nav.sheet-tabs {
color: #6d5923 !important; color: #6d5923 !important;
} }
nav.sheet-tabs .item { .fvtt-malefices nav.sheet-tabs .item {
position: relative; position: relative;
padding: 0 0.25rem; padding: 0 0.25rem;
color: @color-tab-text; color: @color-tab-text;
@@ -297,7 +306,7 @@ nav.sheet-tabs .item {
margin-bottom: 4px; margin-bottom: 4px;
} }
nav.sheet-tabs .item:after { .fvtt-malefices nav.sheet-tabs .item:after {
content: ""; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
@@ -29,7 +29,8 @@ export default class MaleficesArchetypeSheet extends MaleficesItemSheet {
async _prepareContext() { async _prepareContext() {
const context = await super._prepareContext() const context = await super._prepareContext()
context.tabs = this.#getTabs() 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 return context
} }
} }
+5 -3
View File
@@ -131,10 +131,12 @@ Hooks.once("ready", function () {
/* Foundry VTT Initialization */ /* Foundry VTT Initialization */
/* -------------------------------------------- */ /* -------------------------------------------- */
Hooks.on("chatMessage", (html, content, msg) => { 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 regExp = /(\S+)/g;
let commands = content.match(regExp); let commands = stripped.match(regExp);
if (game.system.malefices.commands.processChatCommand(commands, content, msg)) { if (game.system.malefices.commands.processChatCommand(commands, stripped, msg)) {
return false; return false;
} }
} }
+52
View File
@@ -53,6 +53,58 @@ export class MaleficesTirageTarotDialog extends HandlebarsApplicationMixin(Appli
}) })
el.querySelector('.tirage-close-btn')?.addEventListener('click', () => this.close()) el.querySelector('.tirage-close-btn')?.addEventListener('click', () => this.close())
this._setupCardZoom(el)
}
/* -------------------------------------------- */
_setupCardZoom(el) {
let overlay = document.getElementById('tirage-card-zoom-overlay')
if (!overlay) {
overlay = document.createElement('div')
overlay.id = 'tirage-card-zoom-overlay'
overlay.innerHTML = '<img src="" alt="" />'
document.body.appendChild(overlay)
}
const overlayImg = overlay.querySelector('img')
const ZOOM_W = 224 // 220px image + 2px border × 2
const TAROT_RATIO = 5 / 3 // hauteur / largeur (cartes tarot portrait)
const position = (rect) => {
const vw = window.innerWidth
const vh = window.innerHeight
const zoomH = Math.round(ZOOM_W * TAROT_RATIO)
let left = rect.left + rect.width / 2 - ZOOM_W / 2
let top = rect.top - zoomH - 10
left = Math.max(8, Math.min(left, vw - ZOOM_W - 8))
if (top < 8) top = rect.bottom + 8
if (top + zoomH > vh - 8) top = Math.max(8, vh - zoomH - 8)
overlay.style.left = left + 'px'
overlay.style.top = top + 'px'
}
const show = (cardImg) => {
overlayImg.src = cardImg.src
overlayImg.className = cardImg.className
overlay.classList.add('visible')
position(cardImg.getBoundingClientRect())
}
const hide = () => overlay.classList.remove('visible')
el.querySelectorAll('.tirage-card-img').forEach(img => {
img.addEventListener('mouseenter', () => show(img))
img.addEventListener('mouseleave', hide)
})
}
/* -------------------------------------------- */
_onClose(_options) {
document.getElementById('tirage-card-zoom-overlay')?.remove()
return super._onClose(_options)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
+17 -14
View File
@@ -7,7 +7,7 @@ export class MaleficesUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async init() { static async init() {
Hooks.on('renderChatLog', (log, html, data) => MaleficesUtility.chatListeners(html)); Hooks.on('renderChatMessageHTML', (message, html) => MaleficesUtility.chatListeners(message, html));
this.rollDataStore = {} this.rollDataStore = {}
this.defenderStore = {} this.defenderStore = {}
@@ -73,7 +73,7 @@ export class MaleficesUtility {
/*-------------------------------------------- */ /*-------------------------------------------- */
static getTarots() { static getTarots() {
return foundry.utils.duplicate(this.tarots) return foundry.utils.duplicate(this.tarots ?? [])
} }
static getTarot(tId) { static getTarot(tId) {
return this.tarots.find(t => t._id == tId) return this.tarots.find(t => t._id == tId)
@@ -105,29 +105,32 @@ export class MaleficesUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static drawDeckCard(msgId) { static drawDeckCard(msgId) {
if (game.user.isGM) { 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 { } else {
game.socket.emit("system.fvtt-malefices", { name: "msg-draw-card", data: { msgId: msgId } }) 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 => { html.querySelector('.roll-destin')?.addEventListener('click', () => {
let messageId = MaleficesUtility.findChatMessageId(event.currentTarget) const rollData = message.getFlag("world", "rolldata")
let message = game.messages.get(messageId) const actor = MaleficesUtility.getActorFromRollData(rollData)
let rollData = message.getFlag("world", "rolldata")
let actor = this.getActorFromRollData(rollData)
actor.incDecDestin(-1) actor.incDecDestin(-1)
rollData.isReroll = true rollData.isReroll = true
this.rollMalefices(rollData) MaleficesUtility.rollMalefices(rollData)
})
$(html).on("click", '.draw-tarot-card', event => {
let messageId = MaleficesUtility.findChatMessageId(event.currentTarget)
this.drawDeckCard(messageId)
}) })
html.querySelector('.draw-tarot-card')?.addEventListener('click', () => {
MaleficesUtility.drawDeckCard(message.id)
})
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000068 MANIFEST-000014
+7 -7
View File
@@ -1,7 +1,7 @@
2026/04/01-21:52:59.516756 7f30557ee6c0 Recovering log #66 2026/04/26-15:45:25.152297 7f5797fff6c0 Recovering log #12
2026/04/01-21:52:59.526211 7f30557ee6c0 Delete type=0 #66 2026/04/26-15:45:25.163242 7f5797fff6c0 Delete type=3 #10
2026/04/01-21:52:59.526277 7f30557ee6c0 Delete type=3 #64 2026/04/26-15:45:25.163372 7f5797fff6c0 Delete type=0 #12
2026/04/01-21:56:55.040835 7f303effd6c0 Level-0 table #71: started 2026/04/26-15:50:25.999778 7f57977fe6c0 Level-0 table #17: started
2026/04/01-21:56:55.040885 7f303effd6c0 Level-0 table #71: 0 bytes OK 2026/04/26-15:50:25.999856 7f57977fe6c0 Level-0 table #17: 0 bytes OK
2026/04/01-21:56:55.047352 7f303effd6c0 Delete type=0 #69 2026/04/26-15:50:26.044072 7f57977fe6c0 Delete type=0 #15
2026/04/01-21:56:55.067290 7f303effd6c0 Manual compaction at level-0 from '!items!2HWSdXDSFei9KC6y' @ 72057594037927935 : 1 .. '!items!xtYE2kVIfNtrXSoU' @ 0 : 0; will stop at (end) 2026/04/26-15:50:26.163225 7f57977fe6c0 Manual compaction at level-0 from '!items!2HWSdXDSFei9KC6y' @ 72057594037927935 : 1 .. '!items!xtYE2kVIfNtrXSoU' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/27-10:28:01.892467 7f56f8bfd6c0 Recovering log #63 2026/04/24-22:28:39.384762 7f5797fff6c0 Recovering log #7
2026/02/27-10:28:01.948160 7f56f8bfd6c0 Delete type=0 #63 2026/04/24-22:28:39.395035 7f5797fff6c0 Delete type=3 #4
2026/02/27-10:28:01.948272 7f56f8bfd6c0 Delete type=3 #62 2026/04/24-22:28:39.395099 7f5797fff6c0 Delete type=0 #7
2026/02/27-14:29:37.861283 7f54e37ef6c0 Level-0 table #67: started 2026/04/24-22:28:50.922092 7f57977fe6c0 Level-0 table #13: started
2026/02/27-14:29:37.861314 7f54e37ef6c0 Level-0 table #67: 0 bytes OK 2026/04/24-22:28:50.922111 7f57977fe6c0 Level-0 table #13: 0 bytes OK
2026/02/27-14:29:37.867488 7f54e37ef6c0 Delete type=0 #65 2026/04/24-22:28:50.928410 7f57977fe6c0 Delete type=0 #11
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:28:50.928567 7f57977fe6c0 Manual compaction at level-0 from '!items!2HWSdXDSFei9KC6y' @ 72057594037927935 : 1 .. '!items!xtYE2kVIfNtrXSoU' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000068 MANIFEST-000014
+7 -7
View File
@@ -1,7 +1,7 @@
2026/04/01-21:52:59.503313 7f303ffff6c0 Recovering log #66 2026/04/26-15:45:25.139939 7f57a5fef6c0 Recovering log #12
2026/04/01-21:52:59.513994 7f303ffff6c0 Delete type=0 #66 2026/04/26-15:45:25.149583 7f57a5fef6c0 Delete type=3 #10
2026/04/01-21:52:59.514046 7f303ffff6c0 Delete type=3 #64 2026/04/26-15:45:25.149682 7f57a5fef6c0 Delete type=0 #12
2026/04/01-21:56:55.047475 7f303effd6c0 Level-0 table #71: started 2026/04/26-15:50:26.086035 7f57977fe6c0 Level-0 table #17: started
2026/04/01-21:56:55.047500 7f303effd6c0 Level-0 table #71: 0 bytes OK 2026/04/26-15:50:26.086057 7f57977fe6c0 Level-0 table #17: 0 bytes OK
2026/04/01-21:56:55.053914 7f303effd6c0 Delete type=0 #69 2026/04/26-15:50:26.123168 7f57977fe6c0 Delete type=0 #15
2026/04/01-21:56:55.067309 7f303effd6c0 Manual compaction at level-0 from '!items!5J6qIaWdnhEGMAXJ' @ 72057594037927935 : 1 .. '!items!nkRQU81L1gWOfaeo' @ 0 : 0; will stop at (end) 2026/04/26-15:50:26.163252 7f57977fe6c0 Manual compaction at level-0 from '!items!5J6qIaWdnhEGMAXJ' @ 72057594037927935 : 1 .. '!items!nkRQU81L1gWOfaeo' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/27-10:28:01.832073 7f56f93fe6c0 Recovering log #63 2026/04/24-22:28:39.371429 7f57a4fed6c0 Recovering log #7
2026/02/27-10:28:01.886020 7f56f93fe6c0 Delete type=0 #63 2026/04/24-22:28:39.381830 7f57a4fed6c0 Delete type=3 #4
2026/02/27-10:28:01.886089 7f56f93fe6c0 Delete type=3 #62 2026/04/24-22:28:39.381879 7f57a4fed6c0 Delete type=0 #7
2026/02/27-14:29:37.854040 7f54e37ef6c0 Level-0 table #67: started 2026/04/24-22:28:50.909112 7f57977fe6c0 Level-0 table #13: started
2026/02/27-14:29:37.854089 7f54e37ef6c0 Level-0 table #67: 0 bytes OK 2026/04/24-22:28:50.909132 7f57977fe6c0 Level-0 table #13: 0 bytes OK
2026/02/27-14:29:37.861166 7f54e37ef6c0 Delete type=0 #65 2026/04/24-22:28:50.915804 7f57977fe6c0 Delete type=0 #11
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:28:50.928548 7f57977fe6c0 Manual compaction at level-0 from '!items!5J6qIaWdnhEGMAXJ' @ 72057594037927935 : 1 .. '!items!nkRQU81L1gWOfaeo' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
View File
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000068 MANIFEST-000014
+7 -7
View File
@@ -1,7 +1,7 @@
2026/04/01-21:52:59.529572 7f303f7fe6c0 Recovering log #66 2026/04/26-15:45:25.166949 7f57a57ee6c0 Recovering log #12
2026/04/01-21:52:59.539790 7f303f7fe6c0 Delete type=0 #66 2026/04/26-15:45:25.176930 7f57a57ee6c0 Delete type=3 #10
2026/04/01-21:52:59.539842 7f303f7fe6c0 Delete type=3 #64 2026/04/26-15:45:25.177039 7f57a57ee6c0 Delete type=0 #12
2026/04/01-21:56:55.083102 7f303effd6c0 Level-0 table #71: started 2026/04/26-15:50:26.123322 7f57977fe6c0 Level-0 table #17: started
2026/04/01-21:56:55.083142 7f303effd6c0 Level-0 table #71: 0 bytes OK 2026/04/26-15:50:26.123351 7f57977fe6c0 Level-0 table #17: 0 bytes OK
2026/04/01-21:56:55.089723 7f303effd6c0 Delete type=0 #69 2026/04/26-15:50:26.163080 7f57977fe6c0 Delete type=0 #15
2026/04/01-21:56:55.099487 7f303effd6c0 Manual compaction at level-0 from '!macros!ESV4er8Hy6liMOC3' @ 72057594037927935 : 1 .. '!macros!zDPgmHiwNxBWhoYz' @ 0 : 0; will stop at (end) 2026/04/26-15:50:26.163536 7f57977fe6c0 Manual compaction at level-0 from '!macros!ESV4er8Hy6liMOC3' @ 72057594037927935 : 1 .. '!macros!zDPgmHiwNxBWhoYz' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/27-10:28:01.956384 7f56e3fff6c0 Recovering log #63 2026/04/24-22:28:39.397236 7f57a5fef6c0 Recovering log #7
2026/02/27-10:28:02.013265 7f56e3fff6c0 Delete type=0 #63 2026/04/24-22:28:39.407011 7f57a5fef6c0 Delete type=3 #4
2026/02/27-10:28:02.013323 7f56e3fff6c0 Delete type=3 #62 2026/04/24-22:28:39.407078 7f57a5fef6c0 Delete type=0 #7
2026/02/27-14:29:37.873932 7f54e37ef6c0 Level-0 table #67: started 2026/04/24-22:28:50.902120 7f57977fe6c0 Level-0 table #13: started
2026/02/27-14:29:37.873976 7f54e37ef6c0 Level-0 table #67: 0 bytes OK 2026/04/24-22:28:50.902174 7f57977fe6c0 Level-0 table #13: 0 bytes OK
2026/02/27-14:29:37.880214 7f54e37ef6c0 Delete type=0 #65 2026/04/24-22:28:50.908974 7f57977fe6c0 Delete type=0 #11
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:28:50.928535 7f57977fe6c0 Manual compaction at level-0 from '!macros!ESV4er8Hy6liMOC3' @ 72057594037927935 : 1 .. '!macros!zDPgmHiwNxBWhoYz' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
View File
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000068 MANIFEST-000014
+7 -7
View File
@@ -1,7 +1,7 @@
2026/04/01-21:52:59.490358 7f3054fed6c0 Recovering log #66 2026/04/26-15:45:25.125828 7f5797fff6c0 Recovering log #12
2026/04/01-21:52:59.500678 7f3054fed6c0 Delete type=0 #66 2026/04/26-15:45:25.137218 7f5797fff6c0 Delete type=3 #10
2026/04/01-21:52:59.500730 7f3054fed6c0 Delete type=3 #64 2026/04/26-15:45:25.137347 7f5797fff6c0 Delete type=0 #12
2026/04/01-21:56:55.054021 7f303effd6c0 Level-0 table #71: started 2026/04/26-15:50:26.044212 7f57977fe6c0 Level-0 table #17: started
2026/04/01-21:56:55.054050 7f303effd6c0 Level-0 table #71: 0 bytes OK 2026/04/26-15:50:26.044240 7f57977fe6c0 Level-0 table #17: 0 bytes OK
2026/04/01-21:56:55.060482 7f303effd6c0 Delete type=0 #69 2026/04/26-15:50:26.085910 7f57977fe6c0 Delete type=0 #15
2026/04/01-21:56:55.067323 7f303effd6c0 Manual compaction at level-0 from '!items!1DRKmbzGzbCRCswc' @ 72057594037927935 : 1 .. '!items!zbGGMEQFdwVdlKAf' @ 0 : 0; will stop at (end) 2026/04/26-15:50:26.163240 7f57977fe6c0 Manual compaction at level-0 from '!items!1DRKmbzGzbCRCswc' @ 72057594037927935 : 1 .. '!items!zbGGMEQFdwVdlKAf' @ 0 : 0; will stop at (end)
+7 -7
View File
@@ -1,7 +1,7 @@
2026/02/27-10:28:01.770730 7f56f9bff6c0 Recovering log #63 2026/04/24-22:28:39.359656 7f5797fff6c0 Recovering log #7
2026/02/27-10:28:01.825327 7f56f9bff6c0 Delete type=0 #63 2026/04/24-22:28:39.369413 7f5797fff6c0 Delete type=3 #4
2026/02/27-10:28:01.825401 7f56f9bff6c0 Delete type=3 #62 2026/04/24-22:28:39.369477 7f5797fff6c0 Delete type=0 #7
2026/02/27-14:29:37.867627 7f54e37ef6c0 Level-0 table #67: started 2026/04/24-22:28:50.915944 7f57977fe6c0 Level-0 table #13: started
2026/02/27-14:29:37.867663 7f54e37ef6c0 Level-0 table #67: 0 bytes OK 2026/04/24-22:28:50.915969 7f57977fe6c0 Level-0 table #13: 0 bytes OK
2026/02/27-14:29:37.873757 7f54e37ef6c0 Delete type=0 #65 2026/04/24-22:28:50.922007 7f57977fe6c0 Delete type=0 #11
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:28:50.928556 7f57977fe6c0 Manual compaction at level-0 from '!items!1DRKmbzGzbCRCswc' @ 72057594037927935 : 1 .. '!items!zbGGMEQFdwVdlKAf' @ 0 : 0; will stop at (end)
Binary file not shown.
Binary file not shown.
Binary file not shown.
+61 -85
View File
@@ -3,76 +3,35 @@
font-family: "Rivanna"; font-family: "Rivanna";
src: url('../fonts/rivanna.ttf') format("truetype"); src: url('../fonts/rivanna.ttf') format("truetype");
} }
:root { /* Global styles scoped to Maléfices windows only */
/* =================== 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 */
.fvtt-malefices .window-app { .fvtt-malefices .window-app {
text-align: justify; text-align: justify;
font-size: 16px; font-size: 16px;
letter-spacing: 1px; letter-spacing: 1px;
} }
/* Fonts */ /* Fonts — scoped to system sheets */
.sheet header.sheet-header h1 input, .fvtt-malefices .sheet header.sheet-header h1 input,
.window-app .window-header,
#actors .directory-list, #actors .directory-list,
#navigation #scene-list .scene.nav-item { #navigation #scene-list .scene.nav-item {
font-size: 1rem; font-size: 1rem;
} }
/* For title, sidebar character and scene */
.fvtt-malefices .sheet nav.sheet-tabs { .fvtt-malefices .sheet nav.sheet-tabs {
font-size: 0.8rem; font-size: 0.8rem;
} }
/* For nav and title */
.window-app input,
.fvtt-malefices .item-form, .fvtt-malefices .item-form,
.sheet header.sheet-header .flex-group-center.flex-compteurs, .fvtt-malefices .sheet header.sheet-header .flex-group-center.flex-compteurs,
.sheet header.sheet-header .flex-group-center.flex-fatigue, .fvtt-malefices .sheet header.sheet-header .flex-group-center.flex-fatigue,
select, .fvtt-malefices .item-checkbox,
button,
.item-checkbox,
#sidebar, #sidebar,
#players, #players,
#navigation #nav-toggle { #navigation #nav-toggle {
font-size: 0.8rem; 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; font-weight: bold;
} }
.tabs .item.active, .fvtt-malefices .tabs .item.active,
.blessures-list li ul li:first-child:hover, .blessures-list li ul li:first-child:hover {
a:hover {
text-shadow: 1px 0px 0px #ff6600; text-shadow: 1px 0px 0px #ff6600;
} }
.rollable:hover, .rollable:hover,
@@ -81,15 +40,15 @@ a:hover {
text-shadow: 0 0 10px red; text-shadow: 0 0 10px red;
cursor: pointer; cursor: pointer;
} }
input:hover, .fvtt-malefices input:hover,
select:hover { .fvtt-malefices select:hover {
border-width: 4px; border-width: 4px;
border-color: #554182; border-color: #554182;
} }
input:disabled { .fvtt-malefices input:disabled {
color: #1c2058; color: #1c2058;
} }
select:disabled { .fvtt-malefices select:disabled {
color: #1c2058; color: #1c2058;
} }
table { table {
@@ -365,46 +324,45 @@ li.folder > .folder-header h3 {
background: url("../images/ui/background_01_clear.webp"); background: url("../images/ui/background_01_clear.webp");
/*background: #494e6b;*/ /*background: #494e6b;*/
} }
input[type="text"], .fvtt-malefices input[type="text"],
select[type="text"] { .fvtt-malefices select[type="text"] {
background: white; background: white;
color: #494e6b; color: #494e6b;
} }
select { .fvtt-malefices select {
background: white; background: white;
color: #494e6b; color: #494e6b;
} }
/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/ /* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/
/*color: rgba(168, 139, 139, 0.5);*/ /*color: rgba(168, 139, 139, 0.5);*/
.window-app.sheet .window-content .sheet-header select[type="text"], .fvtt-malefices.window-app.sheet .window-content .sheet-header select[type="text"],
.window-app.sheet .window-content .sheet-header input[type="text"], .fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="text"],
.window-app.sheet .window-content .sheet-header input[type="number"], .fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="number"],
.window-app.sheet .window-content .sheet-body input[type="text"], .fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="text"],
.window-app.sheet .window-content .sheet-body input[type="number"], .fvtt-malefices.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-body select[type="text"] {
color: rgba(19, 18, 18, 0.95); color: rgba(19, 18, 18, 0.95);
/*color: #494e6b;*/
} }
.window-app.sheet .window-content .sheet-header input[type="password"], .fvtt-malefices.window-app.sheet .window-content .sheet-header input[type="password"],
.window-app.sheet .window-content .sheet-header input[type="date"], .fvtt-malefices.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="time"] {
color: rgba(19, 18, 18, 0.95); color: rgba(19, 18, 18, 0.95);
background: url("../images/ui/background_01_clear.webp"); background: url("../images/ui/background_01_clear.webp");
border: 1 none; border: 1 none;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
margin-left: 2px; margin-left: 2px;
} }
.window-app.sheet .window-content .sheet-body input[type="password"], .fvtt-malefices.window-app.sheet .window-content .sheet-body input[type="password"],
.window-app.sheet .window-content .sheet-body input[type="date"], .fvtt-malefices.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="time"] {
color: rgba(19, 18, 18, 0.95); color: rgba(19, 18, 18, 0.95);
background: url("../images/ui/background_01_clear.webp"); background: url("../images/ui/background_01_clear.webp");
border: 1 none; border: 1 none;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
margin-left: 2px; margin-left: 2px;
} }
.window-app.sheet .window-content .sheet-body select, .fvtt-malefices.window-app.sheet .window-content .sheet-body select,
.window-app.sheet .window-content .sheet-header select { .fvtt-malefices.window-app.sheet .window-content .sheet-header select {
color: rgba(19, 18, 18, 0.95); color: rgba(19, 18, 18, 0.95);
background: #fff; background: #fff;
border: 1 none; border: 1 none;
@@ -428,7 +386,7 @@ section.sheet-body {
margin: 0.5rem 0 0.5rem 0.5rem; margin: 0.5rem 0 0.5rem 0.5rem;
padding: 0; padding: 0;
} }
nav.sheet-tabs { .fvtt-malefices nav.sheet-tabs {
font-size: 1.2rem; font-size: 1.2rem;
font-weight: bold; font-weight: bold;
height: 3rem; height: 3rem;
@@ -453,14 +411,14 @@ nav.sheet-tabs {
.dice-tray button { .dice-tray button {
color: #6d5923 !important; color: #6d5923 !important;
} }
nav.sheet-tabs .item { .fvtt-malefices nav.sheet-tabs .item {
position: relative; position: relative;
padding: 0 0.25rem; padding: 0 0.25rem;
color: beige; color: beige;
margin-top: 4px; margin-top: 4px;
margin-bottom: 4px; margin-bottom: 4px;
} }
nav.sheet-tabs .item:after { .fvtt-malefices nav.sheet-tabs .item:after {
content: ""; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
@@ -1589,22 +1547,11 @@ li {
width: 100px; width: 100px;
vertical-align: top; vertical-align: top;
} }
.MaleficesDialog .tirage-tarot-dialog .tirage-card:hover {
position: relative;
z-index: 100;
}
.MaleficesDialog .tirage-tarot-dialog .tirage-card:hover .tirage-card-img {
transform: scale(2.2);
transform-origin: center top;
box-shadow: 3px 3px 12px rgba(0, 0, 0, 0.4);
}
.MaleficesDialog .tirage-tarot-dialog .tirage-card .tirage-card-img { .MaleficesDialog .tirage-tarot-dialog .tirage-card .tirage-card-img {
width: 100px; width: 100px;
border: 1px solid rgba(139, 105, 20, 0.45); border: 1px solid rgba(139, 105, 20, 0.45);
border-radius: 2px; border-radius: 2px;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2); box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2);
transition: transform 0.2s ease, box-shadow 0.2s ease;
transform-origin: center center;
cursor: zoom-in; cursor: zoom-in;
} }
.MaleficesDialog .tirage-tarot-dialog .tirage-card .tirage-card-name { .MaleficesDialog .tirage-tarot-dialog .tirage-card .tirage-card-name {
@@ -1658,6 +1605,29 @@ li {
border-color: #8b6914; border-color: #8b6914;
color: #5a0a14; color: #5a0a14;
} }
#tirage-card-zoom-overlay {
position: fixed;
z-index: 10000;
pointer-events: none;
border: 2px solid rgba(139, 105, 20, 0.45);
border-radius: 3px;
box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.55);
opacity: 0;
transition: opacity 0.15s ease;
background: #000;
}
#tirage-card-zoom-overlay.visible {
opacity: 1;
}
#tirage-card-zoom-overlay img {
display: block;
width: 220px;
height: auto;
border-radius: 2px;
}
#tirage-card-zoom-overlay img.flip-tarot {
transform: scaleY(-1);
}
.malefices-chat-card { .malefices-chat-card {
font-size: 0.85rem; font-size: 0.85rem;
color: #3d2b1f; color: #3d2b1f;
@@ -1957,6 +1927,7 @@ li {
/* Fixed header bar */ /* Fixed header bar */
/* sheet-body: scroll container */ /* sheet-body: scroll container */
/* Override legacy height: 100% on tab divs; hide all tabs, show only the active one */ /* 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) */ /* Header layout override for item sheets (smaller than actor sheet header) */
/* Tab navigation: AppV2 uses nav.tabs (not nav.sheet-tabs) */ /* Tab navigation: AppV2 uses nav.tabs (not nav.sheet-tabs) */
} }
@@ -1990,6 +1961,11 @@ li {
.fvtt-malefices.item .tab[data-tab].active { .fvtt-malefices.item .tab[data-tab].active {
display: block; 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 { .fvtt-malefices.item .sheet-header {
flex: 0 0 auto; flex: 0 0 auto;
flex-direction: row; flex-direction: row;
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -14,7 +14,7 @@
<li class="flexrow"> <li class="flexrow">
<label class="item-field-label-long">Lame tutélaire</label> <label class="item-field-label-long">Lame tutélaire</label>
<select class="item-field-label-long" name="system.lametutelaire" data-dtype="String"> <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> </select>
</li> </li>
</ul> </ul>