diff --git a/assets/scenes/0iGCRqkdJKjmmbl4-thumb.webp b/assets/scenes/0iGCRqkdJKjmmbl4-thumb.webp new file mode 100644 index 0000000..f9e23b1 Binary files /dev/null and b/assets/scenes/0iGCRqkdJKjmmbl4-thumb.webp differ diff --git a/assets/scenes/Jr7lGxYk2RETlXRv-thumb.webp b/assets/scenes/X3XJg7raEXtOFOtj-thumb.webp similarity index 100% rename from assets/scenes/Jr7lGxYk2RETlXRv-thumb.webp rename to assets/scenes/X3XJg7raEXtOFOtj-thumb.webp diff --git a/fvtt-celestopol.mjs b/fvtt-celestopol.mjs index 7de15b2..af340b8 100644 --- a/fvtt-celestopol.mjs +++ b/fvtt-celestopol.mjs @@ -39,6 +39,7 @@ import { } from "./module/applications/_module.mjs" const DAMAGE_APPLICATION_FLAG = "damageApplication" +const MOON_EFFECT_FLAG = "moonEffectApplied" const FACTION_ASPECT_STATE_SETTING = "factionAspectState" const PREGENS_IMPORTED_SETTING = "pregensImported" const WELCOME_SCENE_IMPORTED_SETTING = "welcomeSceneImported" @@ -173,6 +174,9 @@ Hooks.once("ready", async () => { if (foundry.utils.hasProperty(changed, `flags.${SYSTEM_ID}.${DAMAGE_APPLICATION_FLAG}`)) { _updateRenderedChatMessageState(message) } + if (foundry.utils.hasProperty(changed, `flags.${SYSTEM_ID}.${MOON_EFFECT_FLAG}`)) { + _updateRenderedMoonEffectState(message) + } }) _activateExistingChatCards() @@ -548,8 +552,9 @@ function _activateExistingChatCards() { document.querySelectorAll(".message[data-message-id]").forEach(messageEl => { const messageId = messageEl.dataset.messageId const message = game.messages.get(messageId) - const root = messageEl.querySelector(".celestopol.chat-roll") - if (!message || !root) return + if (!message) return + const root = messageEl.querySelector(".celestopol.chat-roll, .celestopol-roll.moon-standalone-card") + if (!root) return _activateChatCardListeners(message, root) }) } @@ -559,12 +564,19 @@ function _activateChatCardListeners(message, html) { if (!root) return _renderWeaponDamageState(message, root) + _renderMoonEffectState(message, root) root.querySelectorAll('[data-action="apply-weapon-damage"]').forEach(button => { if (button.dataset.bound === "true") return button.dataset.bound = "true" button.addEventListener("click", event => _onApplyWeaponDamageClick(event, message)) }) + + root.querySelectorAll('[data-action="apply-moon-effect"]').forEach(button => { + if (button.dataset.bound === "true") return + button.dataset.bound = "true" + button.addEventListener("click", event => _onApplyMoonEffectClick(event, message)) + }) } async function _onApplyWeaponDamageClick(event, message) { @@ -746,6 +758,126 @@ async function _applyWeaponDamage({ actorId, actorUuid = null, incomingWounds, c return { actorName: actor.name, appliedWounds, armorProtection } } +/* ─── Dé de la Lune — contreparties ─────────────────────────────────────── */ + +function _getMoonEffectState(message) { + return message?.getFlag(SYSTEM_ID, MOON_EFFECT_FLAG) ?? null +} + +function _renderMoonEffectState(message, root) { + const state = _getMoonEffectState(message) + const actionsDiv = root.querySelector(".moon-effect-actions") + if (!actionsDiv) return + + if (!state?.applied) return + + const NEGATIVE_EFFECTS = new Set(["lose-anomaly", "gain-spleen", "lose-destin"]) + + // Désactiver tous les boutons et afficher le statut + actionsDiv.querySelectorAll(".moon-effect-btn").forEach(btn => { btn.disabled = true }) + + let statusEl = actionsDiv.querySelector(".moon-effect-applied-status") + if (!statusEl) { + statusEl = document.createElement("span") + actionsDiv.append(statusEl) + } + statusEl.className = "moon-effect-applied-status" + (NEGATIVE_EFFECTS.has(state.effect) ? " is-negative" : "") + statusEl.textContent = state.effectLabel + ? game.i18n.format("CELESTOPOL.Moon.effectApplied", { label: state.effectLabel }) + : game.i18n.localize("CELESTOPOL.Moon.effectApplied") +} + +function _updateRenderedMoonEffectState(message) { + const msgEl = document.querySelector(`.message[data-message-id="${message.id}"]`) + if (!msgEl) return + const root = msgEl.querySelector(".celestopol.chat-roll, .celestopol-roll.moon-standalone-card") + if (!root) return + _renderMoonEffectState(message, root) +} + +async function _onApplyMoonEffectClick(event, message) { + event.preventDefault() + const state = _getMoonEffectState(message) + if (state?.applied) return + + const button = event.currentTarget + const effect = button.dataset.effect + const actionsDiv = button.closest(".moon-effect-actions") + const actorId = actionsDiv?.dataset.moonActorId ?? "" + const actorUuid = actionsDiv?.dataset.moonActorUuid ?? "" + + // Désactiver immédiatement pour éviter les double-clics + actionsDiv?.querySelectorAll(".moon-effect-btn").forEach(btn => { btn.disabled = true }) + + const actor = await CelestopolRoll.resolveActor({ actorId, actorUuid }) + if (!actor) { + ui.notifications.warn(game.i18n.localize("CELESTOPOL.Moon.actorNotFound")) + actionsDiv?.querySelectorAll(".moon-effect-btn").forEach(btn => { btn.disabled = false }) + return + } + + const effectLabel = await _applyMoonEffect(actor, effect) + if (effectLabel === null) { + actionsDiv?.querySelectorAll(".moon-effect-btn").forEach(btn => { btn.disabled = false }) + return + } + + await message.setFlag(SYSTEM_ID, MOON_EFFECT_FLAG, { applied: true, effect, effectLabel }) +} + +async function _applyMoonEffect(actor, effect) { + const i18n = key => game.i18n.localize(`CELESTOPOL.Moon.${key}`) + const anomaly = actor.items.find(i => i.type === "anomaly") + + switch (effect) { + case "regain-anomaly": { + if (!anomaly) { ui.notifications.warn(i18n("noAnomaly")); return null } + const max = anomaly.system?.level ?? 0 + const cur = anomaly.system?.usesRemaining ?? 0 + if (cur >= max) { ui.notifications.warn(i18n("anomalyFull")); return null } + await anomaly.update({ "system.usesRemaining": Math.min(max, cur + 1) }) + ui.notifications.info(game.i18n.format("CELESTOPOL.Moon.effectApplied", { label: i18n("effectRegainAnomaly") })) + return i18n("effectRegainAnomaly") + } + case "lose-spleen": { + const cur = actor.system?.spleen?.lvl ?? 0 + if (cur <= 0) { ui.notifications.warn(i18n("spleenEmpty")); return null } + await actor.update({ "system.spleen.lvl": Math.max(0, cur - 1) }) + ui.notifications.info(game.i18n.format("CELESTOPOL.Moon.effectApplied", { label: i18n("effectLoseSpleen") })) + return i18n("effectLoseSpleen") + } + case "gain-destin": { + const cur = actor.system?.destin?.lvl ?? 0 + await actor.update({ "system.destin.lvl": Math.min(8, cur + 2) }) + ui.notifications.info(game.i18n.format("CELESTOPOL.Moon.effectApplied", { label: i18n("effectGainDestin") })) + return i18n("effectGainDestin") + } + case "lose-destin": { + const cur = actor.system?.destin?.lvl ?? 0 + await actor.update({ "system.destin.lvl": Math.max(0, cur - 2) }) + ui.notifications.info(game.i18n.format("CELESTOPOL.Moon.effectApplied", { label: i18n("effectLoseDestin") })) + return i18n("effectLoseDestin") + } + case "lose-anomaly": { + if (!anomaly) { ui.notifications.warn(i18n("noAnomaly")); return null } + const cur = anomaly.system?.usesRemaining ?? 0 + if (cur <= 0) { ui.notifications.warn(i18n("anomalyEmpty")); return null } + await anomaly.update({ "system.usesRemaining": Math.max(0, cur - 1) }) + ui.notifications.info(game.i18n.format("CELESTOPOL.Moon.effectApplied", { label: i18n("effectLoseAnomaly") })) + return i18n("effectLoseAnomaly") + } + case "gain-spleen": { + const cur = actor.system?.spleen?.lvl ?? 0 + if (cur >= 8) { ui.notifications.warn(i18n("spleenFull")); return null } + await actor.update({ "system.spleen.lvl": Math.min(8, cur + 1) }) + ui.notifications.info(game.i18n.format("CELESTOPOL.Moon.effectApplied", { label: i18n("effectGainSpleen") })) + return i18n("effectGainSpleen") + } + default: + return null + } +} + function _getDefaultFactionAspectState() { return { pointsMax: 8, diff --git a/lang/fr.json b/lang/fr.json index 701f6a3..f0bca58 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -350,7 +350,22 @@ "mauvaiseFortune": "🔴 Mauvaise Fortune", "chanceInterpret": "Chance", "narrativeInterpret": "Narratif", - "quantiteHint": "Valeur" + "quantiteHint": "Valeur", + "applyChoose": "Choisissez la contrepartie :", + "effectNarrativeOnly": "(Narratif — sans effet mécanique)", + "effectRegainAnomaly": "🌟 Regain d'1 Anomalie", + "effectLoseSpleen": "💚 Perte d'1 Spleen", + "effectGainDestin": "⭐ Gain de 2 Destin", + "effectLoseDestin": "⭐ Perte de 2 Destin", + "effectLoseAnomaly": "❌ Perte d'1 Anomalie", + "effectGainSpleen": "💔 Gain d'1 Spleen", + "effectApplied": "Contrepartie appliquée : {label}", + "noAnomaly": "Ce personnage n'a pas d'anomalie", + "anomalyFull": "L'anomalie est déjà au maximum d'utilisations", + "anomalyEmpty": "L'anomalie n'a plus d'utilisation disponible", + "spleenEmpty": "Le Spleen est déjà à 0", + "spleenFull": "Le Spleen est déjà au maximum", + "actorNotFound": "Personnage introuvable" }, "Difficulty": { "unknown": "Aucun seuil", diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs index 89a1174..9432fb1 100644 --- a/module/documents/roll.mjs +++ b/module/documents/roll.mjs @@ -632,13 +632,17 @@ export class CelestopolRoll extends Roll { selectedTargetAppliedWounds, availableTargets, // Dé de lune - hasMoonDie: moonDieResult !== null, + hasMoonDie: moonDieResult !== null, moonDieResult, - moonFaceSymbol: moonFace?.symbol ?? "", - moonFaceLabel: moonFace ? game.i18n.localize(moonFace.label) : "", - moonResultClass: moonResultType?.cssClass ?? "", - moonResultLabel: moonResultType ? game.i18n.localize(moonResultType.label) : "", - moonResultDesc: moonResultType ? game.i18n.localize(moonResultType.desc) : "", + moonFaceSymbol: moonFace?.symbol ?? "", + moonFaceLabel: moonFace ? game.i18n.localize(moonFace.label) : "", + moonResultClass: moonResultType?.cssClass ?? "", + moonResultLabel: moonResultType ? game.i18n.localize(moonResultType.label) : "", + moonResultDesc: moonResultType ? game.i18n.localize(moonResultType.desc) : "", + moonResultTypeId: moonResultType?.id ?? null, + moonActorId: (actorType === "character") ? (this.options.actorId ?? null) : null, + moonActorUuid: (actorType === "character") ? (this.options.actorUuid ?? null) : null, + moonActorIsCharacter: actorType === "character", isPrivate, tooltip: isPrivate ? "" : await this.getTooltip(), } @@ -698,15 +702,20 @@ export class CelestopolRoll extends Roll { const resultType = face ? SYSTEM.MOON_RESULT_TYPES[face.result] ?? null : null const isGoodFortune = result <= 4 + const actorIsCharacter = actor?.type === "character" const templateData = { result, - moonFaceSymbol: face?.symbol ?? "", - moonFaceLabel: face ? game.i18n.localize(face.label) : "", - moonResultLabel: resultType ? game.i18n.localize(resultType.label) : "", - moonResultDesc: resultType ? game.i18n.localize(resultType.desc) : "", - moonResultClass: resultType?.cssClass ?? "", + moonFaceSymbol: face?.symbol ?? "", + moonFaceLabel: face ? game.i18n.localize(face.label) : "", + moonResultLabel: resultType ? game.i18n.localize(resultType.label) : "", + moonResultDesc: resultType ? game.i18n.localize(resultType.desc) : "", + moonResultClass: resultType?.cssClass ?? "", + moonResultTypeId: resultType?.id ?? null, isGoodFortune, - actorName: actor?.name ?? null, + actorName: actor?.name ?? null, + moonActorIsCharacter: actorIsCharacter, + moonActorId: actorIsCharacter ? (actor.id ?? null) : null, + moonActorUuid: actorIsCharacter ? (actor.uuid ?? null) : null, } const content = await foundry.applications.handlebars.renderTemplate( @@ -721,7 +730,6 @@ export class CelestopolRoll extends Roll { await ChatMessage.create({ content, speaker, - rolls: [roll], style: CONST.CHAT_MESSAGE_STYLES.OTHER, }) } diff --git a/packs-system/aides-de-jeu/000075.log b/packs-system/aides-de-jeu/000078.log similarity index 100% rename from packs-system/aides-de-jeu/000075.log rename to packs-system/aides-de-jeu/000078.log diff --git a/packs-system/aides-de-jeu/CURRENT b/packs-system/aides-de-jeu/CURRENT index f8d57cc..f24fe8e 100644 --- a/packs-system/aides-de-jeu/CURRENT +++ b/packs-system/aides-de-jeu/CURRENT @@ -1 +1 @@ -MANIFEST-000074 +MANIFEST-000076 diff --git a/packs-system/aides-de-jeu/LOG b/packs-system/aides-de-jeu/LOG index edf2787..46bb021 100644 --- a/packs-system/aides-de-jeu/LOG +++ b/packs-system/aides-de-jeu/LOG @@ -1,3 +1,8 @@ -2026/04/14-10:43:54.304360 7fddcbfff6c0 Recovering log #72 -2026/04/14-10:43:54.314599 7fddcbfff6c0 Delete type=3 #70 -2026/04/14-10:43:54.314647 7fddcbfff6c0 Delete type=0 #72 +2026/04/14-21:45:17.258246 7fc1d9fbd6c0 Recovering log #75 +2026/04/14-21:45:17.274015 7fc1d9fbd6c0 Delete type=0 #75 +2026/04/14-21:45:17.274077 7fc1d9fbd6c0 Delete type=3 #74 +2026/04/15-02:16:16.676658 7fc1d8fbb6c0 Level-0 table #79: started +2026/04/15-02:16:16.676686 7fc1d8fbb6c0 Level-0 table #79: 0 bytes OK +2026/04/15-02:16:16.720642 7fc1d8fbb6c0 Delete type=0 #77 +2026/04/15-02:16:16.819908 7fc1d8fbb6c0 Manual compaction at level-0 from '!journal!eNYstmPK0mMmVJYC' @ 72057594037927935 : 1 .. '!journal.pages!eNYstmPK0mMmVJYC.r9h1ggd3G9hiqYJX' @ 0 : 0; will stop at (end) +2026/04/15-02:16:16.881523 7fc1d8fbb6c0 Manual compaction at level-1 from '!journal!eNYstmPK0mMmVJYC' @ 72057594037927935 : 1 .. '!journal.pages!eNYstmPK0mMmVJYC.r9h1ggd3G9hiqYJX' @ 0 : 0; will stop at (end) diff --git a/packs-system/aides-de-jeu/LOG.old b/packs-system/aides-de-jeu/LOG.old index 2a606b7..edf2787 100644 --- a/packs-system/aides-de-jeu/LOG.old +++ b/packs-system/aides-de-jeu/LOG.old @@ -1,8 +1,3 @@ -2026/04/14-00:55:24.427256 7f68497ed6c0 Recovering log #68 -2026/04/14-00:55:24.442232 7f68497ed6c0 Delete type=3 #66 -2026/04/14-00:55:24.442302 7f68497ed6c0 Delete type=0 #68 -2026/04/14-00:56:01.490011 7f6833fff6c0 Level-0 table #73: started -2026/04/14-00:56:01.490050 7f6833fff6c0 Level-0 table #73: 0 bytes OK -2026/04/14-00:56:01.496026 7f6833fff6c0 Delete type=0 #71 -2026/04/14-00:56:01.502797 7f6833fff6c0 Manual compaction at level-0 from '!journal!eNYstmPK0mMmVJYC' @ 72057594037927935 : 1 .. '!journal.pages!eNYstmPK0mMmVJYC.r9h1ggd3G9hiqYJX' @ 0 : 0; will stop at (end) -2026/04/14-00:56:01.513341 7f6833fff6c0 Manual compaction at level-1 from '!journal!eNYstmPK0mMmVJYC' @ 72057594037927935 : 1 .. '!journal.pages!eNYstmPK0mMmVJYC.r9h1ggd3G9hiqYJX' @ 0 : 0; will stop at (end) +2026/04/14-10:43:54.304360 7fddcbfff6c0 Recovering log #72 +2026/04/14-10:43:54.314599 7fddcbfff6c0 Delete type=3 #70 +2026/04/14-10:43:54.314647 7fddcbfff6c0 Delete type=0 #72 diff --git a/packs-system/aides-de-jeu/MANIFEST-000074 b/packs-system/aides-de-jeu/MANIFEST-000076 similarity index 79% rename from packs-system/aides-de-jeu/MANIFEST-000074 rename to packs-system/aides-de-jeu/MANIFEST-000076 index fe288a9..cf89710 100644 Binary files a/packs-system/aides-de-jeu/MANIFEST-000074 and b/packs-system/aides-de-jeu/MANIFEST-000076 differ diff --git a/packs-system/anomalies/000128.log b/packs-system/anomalies/000128.log deleted file mode 100644 index 7746829..0000000 Binary files a/packs-system/anomalies/000128.log and /dev/null differ diff --git a/packs-system/pretires/000036.log b/packs-system/anomalies/000132.log similarity index 100% rename from packs-system/pretires/000036.log rename to packs-system/anomalies/000132.log diff --git a/packs-system/anomalies/000126.ldb b/packs-system/anomalies/000135.ldb similarity index 96% rename from packs-system/anomalies/000126.ldb rename to packs-system/anomalies/000135.ldb index 77f5089..372fa7f 100644 Binary files a/packs-system/anomalies/000126.ldb and b/packs-system/anomalies/000135.ldb differ diff --git a/packs-system/anomalies/CURRENT b/packs-system/anomalies/CURRENT index 224d52a..ea072ca 100644 --- a/packs-system/anomalies/CURRENT +++ b/packs-system/anomalies/CURRENT @@ -1 +1 @@ -MANIFEST-000127 +MANIFEST-000129 diff --git a/packs-system/anomalies/LOG b/packs-system/anomalies/LOG index 4750b80..14521a7 100644 --- a/packs-system/anomalies/LOG +++ b/packs-system/anomalies/LOG @@ -1,3 +1,24 @@ -2026/04/14-10:43:54.279048 7fddd97be6c0 Recovering log #124 -2026/04/14-10:43:54.288686 7fddd97be6c0 Delete type=3 #122 -2026/04/14-10:43:54.288755 7fddd97be6c0 Delete type=0 #124 +2026/04/14-21:45:17.210322 7fc1dafbf6c0 Recovering log #128 +2026/04/14-21:45:17.212264 7fc1dafbf6c0 Level-0 table #130: started +2026/04/14-21:45:17.217282 7fc1dafbf6c0 Level-0 table #130: 3524 bytes OK +2026/04/14-21:45:17.232642 7fc1dafbf6c0 Delete type=0 #128 +2026/04/14-21:45:17.232776 7fc1dafbf6c0 Delete type=3 #127 +2026/04/15-02:16:16.615618 7fc1d8fbb6c0 Level-0 table #133: started +2026/04/15-02:16:16.640160 7fc1d8fbb6c0 Level-0 table #133: 3524 bytes OK +2026/04/15-02:16:16.676484 7fc1d8fbb6c0 Delete type=0 #131 +2026/04/15-02:16:16.763469 7fc1d8fbb6c0 Manual compaction at level-0 from '!items!anomCommMorts001' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 109 : 1 +2026/04/15-02:16:16.763478 7fc1d8fbb6c0 Compacting 2@0 + 0@1 files +2026/04/15-02:16:16.781648 7fc1d8fbb6c0 Generated table #134@0: 1 keys, 1363 bytes +2026/04/15-02:16:16.781712 7fc1d8fbb6c0 Compacted 2@0 + 0@1 files => 1363 bytes +2026/04/15-02:16:16.819583 7fc1d8fbb6c0 compacted to: files[ 0 1 1 0 0 0 0 ] +2026/04/15-02:16:16.819716 7fc1d8fbb6c0 Delete type=2 #130 +2026/04/15-02:16:16.819841 7fc1d8fbb6c0 Delete type=2 #133 +2026/04/15-02:16:16.881505 7fc1d8fbb6c0 Manual compaction at level-0 from '!items!null' @ 109 : 1 .. '!items!null' @ 0 : 0; will stop at (end) +2026/04/15-02:16:16.881561 7fc1d8fbb6c0 Manual compaction at level-1 from '!items!anomCommMorts001' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 116 : 1 +2026/04/15-02:16:16.881568 7fc1d8fbb6c0 Compacting 1@1 + 1@2 files +2026/04/15-02:16:16.899721 7fc1d8fbb6c0 Generated table #135@1: 9 keys, 6617 bytes +2026/04/15-02:16:16.899762 7fc1d8fbb6c0 Compacted 1@1 + 1@2 files => 6617 bytes +2026/04/15-02:16:16.937990 7fc1d8fbb6c0 compacted to: files[ 0 0 1 0 0 0 0 ] +2026/04/15-02:16:16.938116 7fc1d8fbb6c0 Delete type=2 #126 +2026/04/15-02:16:16.938278 7fc1d8fbb6c0 Delete type=2 #134 +2026/04/15-02:16:17.092334 7fc1d8fbb6c0 Manual compaction at level-1 from '!items!null' @ 116 : 1 .. '!items!null' @ 0 : 0; will stop at (end) diff --git a/packs-system/anomalies/LOG.old b/packs-system/anomalies/LOG.old index f0b562d..4750b80 100644 --- a/packs-system/anomalies/LOG.old +++ b/packs-system/anomalies/LOG.old @@ -1,15 +1,3 @@ -2026/04/14-00:55:24.391968 7f6848fec6c0 Recovering log #119 -2026/04/14-00:55:24.406978 7f6848fec6c0 Delete type=3 #117 -2026/04/14-00:55:24.407044 7f6848fec6c0 Delete type=0 #119 -2026/04/14-00:56:01.480723 7f6833fff6c0 Level-0 table #125: started -2026/04/14-00:56:01.483872 7f6833fff6c0 Level-0 table #125: 3524 bytes OK -2026/04/14-00:56:01.489828 7f6833fff6c0 Delete type=0 #123 -2026/04/14-00:56:01.502786 7f6833fff6c0 Manual compaction at level-0 from '!items!anomCommMorts001' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at (end) -2026/04/14-00:56:01.502828 7f6833fff6c0 Manual compaction at level-1 from '!items!anomCommMorts001' @ 72057594037927935 : 1 .. '!items!null' @ 0 : 0; will stop at '!items!null' @ 105 : 1 -2026/04/14-00:56:01.502835 7f6833fff6c0 Compacting 1@1 + 1@2 files -2026/04/14-00:56:01.506551 7f6833fff6c0 Generated table #126@1: 9 keys, 6617 bytes -2026/04/14-00:56:01.506586 7f6833fff6c0 Compacted 1@1 + 1@2 files => 6617 bytes -2026/04/14-00:56:01.512723 7f6833fff6c0 compacted to: files[ 0 0 1 0 0 0 0 ] -2026/04/14-00:56:01.513072 7f6833fff6c0 Delete type=2 #121 -2026/04/14-00:56:01.513274 7f6833fff6c0 Delete type=2 #125 -2026/04/14-00:56:01.519560 7f6833fff6c0 Manual compaction at level-1 from '!items!null' @ 105 : 1 .. '!items!null' @ 0 : 0; will stop at (end) +2026/04/14-10:43:54.279048 7fddd97be6c0 Recovering log #124 +2026/04/14-10:43:54.288686 7fddd97be6c0 Delete type=3 #122 +2026/04/14-10:43:54.288755 7fddd97be6c0 Delete type=0 #124 diff --git a/packs-system/anomalies/MANIFEST-000127 b/packs-system/anomalies/MANIFEST-000127 deleted file mode 100644 index 908b512..0000000 Binary files a/packs-system/anomalies/MANIFEST-000127 and /dev/null differ diff --git a/packs-system/anomalies/MANIFEST-000129 b/packs-system/anomalies/MANIFEST-000129 new file mode 100644 index 0000000..98ac384 Binary files /dev/null and b/packs-system/anomalies/MANIFEST-000129 differ diff --git a/packs-system/scenes/000075.log b/packs-system/pretires/000039.log similarity index 100% rename from packs-system/scenes/000075.log rename to packs-system/pretires/000039.log diff --git a/packs-system/pretires/CURRENT b/packs-system/pretires/CURRENT index 29a53d8..29c0a00 100644 --- a/packs-system/pretires/CURRENT +++ b/packs-system/pretires/CURRENT @@ -1 +1 @@ -MANIFEST-000035 +MANIFEST-000037 diff --git a/packs-system/pretires/LOG b/packs-system/pretires/LOG index 8e75b46..07e0480 100644 --- a/packs-system/pretires/LOG +++ b/packs-system/pretires/LOG @@ -1,3 +1,8 @@ -2026/04/14-10:43:54.291004 7fddd8fbd6c0 Recovering log #33 -2026/04/14-10:43:54.301929 7fddd8fbd6c0 Delete type=3 #31 -2026/04/14-10:43:54.301981 7fddd8fbd6c0 Delete type=0 #33 +2026/04/14-21:45:17.237698 7fc1da7be6c0 Recovering log #36 +2026/04/14-21:45:17.253057 7fc1da7be6c0 Delete type=0 #36 +2026/04/14-21:45:17.253185 7fc1da7be6c0 Delete type=3 #35 +2026/04/15-02:16:16.720764 7fc1d8fbb6c0 Level-0 table #40: started +2026/04/15-02:16:16.720792 7fc1d8fbb6c0 Level-0 table #40: 0 bytes OK +2026/04/15-02:16:16.763312 7fc1d8fbb6c0 Delete type=0 #38 +2026/04/15-02:16:16.819920 7fc1d8fbb6c0 Manual compaction at level-0 from '!actors!6RZ6IzJUHm4dB5Ut' @ 72057594037927935 : 1 .. '!folders!MbFQgPdF6Gtbj5AU' @ 0 : 0; will stop at (end) +2026/04/15-02:16:16.881536 7fc1d8fbb6c0 Manual compaction at level-1 from '!actors!6RZ6IzJUHm4dB5Ut' @ 72057594037927935 : 1 .. '!folders!MbFQgPdF6Gtbj5AU' @ 0 : 0; will stop at (end) diff --git a/packs-system/pretires/LOG.old b/packs-system/pretires/LOG.old index 30b472b..8e75b46 100644 --- a/packs-system/pretires/LOG.old +++ b/packs-system/pretires/LOG.old @@ -1,8 +1,3 @@ -2026/04/14-00:55:24.409141 7f68497ed6c0 Recovering log #29 -2026/04/14-00:55:24.424702 7f68497ed6c0 Delete type=3 #27 -2026/04/14-00:55:24.424755 7f68497ed6c0 Delete type=0 #29 -2026/04/14-00:56:01.473754 7f6833fff6c0 Level-0 table #34: started -2026/04/14-00:56:01.473797 7f6833fff6c0 Level-0 table #34: 0 bytes OK -2026/04/14-00:56:01.480607 7f6833fff6c0 Delete type=0 #32 -2026/04/14-00:56:01.502772 7f6833fff6c0 Manual compaction at level-0 from '!actors!6RZ6IzJUHm4dB5Ut' @ 72057594037927935 : 1 .. '!folders!MbFQgPdF6Gtbj5AU' @ 0 : 0; will stop at (end) -2026/04/14-00:56:01.502817 7f6833fff6c0 Manual compaction at level-1 from '!actors!6RZ6IzJUHm4dB5Ut' @ 72057594037927935 : 1 .. '!folders!MbFQgPdF6Gtbj5AU' @ 0 : 0; will stop at (end) +2026/04/14-10:43:54.291004 7fddd8fbd6c0 Recovering log #33 +2026/04/14-10:43:54.301929 7fddd8fbd6c0 Delete type=3 #31 +2026/04/14-10:43:54.301981 7fddd8fbd6c0 Delete type=0 #33 diff --git a/packs-system/pretires/MANIFEST-000035 b/packs-system/pretires/MANIFEST-000037 similarity index 65% rename from packs-system/pretires/MANIFEST-000035 rename to packs-system/pretires/MANIFEST-000037 index a5758dd..ff750bd 100644 Binary files a/packs-system/pretires/MANIFEST-000035 and b/packs-system/pretires/MANIFEST-000037 differ diff --git a/packs-system/scenes/000057.ldb b/packs-system/scenes/000057.ldb deleted file mode 100644 index cc9ad21..0000000 Binary files a/packs-system/scenes/000057.ldb and /dev/null differ diff --git a/packs-system/scenes/000078.log b/packs-system/scenes/000078.log new file mode 100644 index 0000000..e69de29 diff --git a/packs-system/scenes/000080.ldb b/packs-system/scenes/000080.ldb new file mode 100644 index 0000000..66953d6 Binary files /dev/null and b/packs-system/scenes/000080.ldb differ diff --git a/packs-system/scenes/CURRENT b/packs-system/scenes/CURRENT index f8d57cc..f24fe8e 100644 --- a/packs-system/scenes/CURRENT +++ b/packs-system/scenes/CURRENT @@ -1 +1 @@ -MANIFEST-000074 +MANIFEST-000076 diff --git a/packs-system/scenes/LOG b/packs-system/scenes/LOG index 5ba95d6..e3969ec 100644 --- a/packs-system/scenes/LOG +++ b/packs-system/scenes/LOG @@ -1,3 +1,15 @@ -2026/04/14-10:43:54.317254 7fddd9fbf6c0 Recovering log #72 -2026/04/14-10:43:54.326872 7fddd9fbf6c0 Delete type=3 #70 -2026/04/14-10:43:54.326932 7fddd9fbf6c0 Delete type=0 #72 +2026/04/14-21:45:17.278141 7fc1d97bc6c0 Recovering log #75 +2026/04/14-21:45:17.294441 7fc1d97bc6c0 Delete type=0 #75 +2026/04/14-21:45:17.294490 7fc1d97bc6c0 Delete type=3 #74 +2026/04/15-02:16:16.819929 7fc1d8fbb6c0 Level-0 table #79: started +2026/04/15-02:16:16.847375 7fc1d8fbb6c0 Level-0 table #79: 3342 bytes OK +2026/04/15-02:16:16.881351 7fc1d8fbb6c0 Delete type=0 #77 +2026/04/15-02:16:16.881546 7fc1d8fbb6c0 Manual compaction at level-0 from '!scenes!0iGCRqkdJKjmmbl4' @ 72057594037927935 : 1 .. '!scenes.levels!Jr7lGxYk2RETlXRv.defaultLevel0000' @ 0 : 0; will stop at (end) +2026/04/15-02:16:16.938347 7fc1d8fbb6c0 Manual compaction at level-1 from '!scenes!0iGCRqkdJKjmmbl4' @ 72057594037927935 : 1 .. '!scenes.levels!Jr7lGxYk2RETlXRv.defaultLevel0000' @ 0 : 0; will stop at '!scenes.tokens.delta.items!Jr7lGxYk2RETlXRv.6urwC5SVcou6UOAG.CTg4yBE12iMee1RU.BYT1CrA37R3Og0nu' @ 49 : 0 +2026/04/15-02:16:16.938354 7fc1d8fbb6c0 Compacting 1@1 + 1@2 files +2026/04/15-02:16:16.955205 7fc1d8fbb6c0 Generated table #80@1: 3 keys, 1810 bytes +2026/04/15-02:16:16.955236 7fc1d8fbb6c0 Compacted 1@1 + 1@2 files => 1810 bytes +2026/04/15-02:16:16.986128 7fc1d8fbb6c0 compacted to: files[ 0 0 1 0 0 0 0 ] +2026/04/15-02:16:16.986229 7fc1d8fbb6c0 Delete type=2 #57 +2026/04/15-02:16:16.986351 7fc1d8fbb6c0 Delete type=2 #79 +2026/04/15-02:16:17.092360 7fc1d8fbb6c0 Manual compaction at level-1 from '!scenes.tokens.delta.items!Jr7lGxYk2RETlXRv.6urwC5SVcou6UOAG.CTg4yBE12iMee1RU.BYT1CrA37R3Og0nu' @ 49 : 0 .. '!scenes.levels!Jr7lGxYk2RETlXRv.defaultLevel0000' @ 0 : 0; will stop at (end) diff --git a/packs-system/scenes/LOG.old b/packs-system/scenes/LOG.old index 4132912..5ba95d6 100644 --- a/packs-system/scenes/LOG.old +++ b/packs-system/scenes/LOG.old @@ -1,8 +1,3 @@ -2026/04/14-00:55:24.444791 7f684a7ef6c0 Recovering log #68 -2026/04/14-00:55:24.460229 7f684a7ef6c0 Delete type=3 #66 -2026/04/14-00:55:24.460280 7f684a7ef6c0 Delete type=0 #68 -2026/04/14-00:56:01.496164 7f6833fff6c0 Level-0 table #73: started -2026/04/14-00:56:01.496194 7f6833fff6c0 Level-0 table #73: 0 bytes OK -2026/04/14-00:56:01.502678 7f6833fff6c0 Delete type=0 #71 -2026/04/14-00:56:01.502807 7f6833fff6c0 Manual compaction at level-0 from '!scenes!Jr7lGxYk2RETlXRv' @ 72057594037927935 : 1 .. '!scenes.tokens.delta.items!Jr7lGxYk2RETlXRv.6urwC5SVcou6UOAG.CTg4yBE12iMee1RU.BYT1CrA37R3Og0nu' @ 0 : 0; will stop at (end) -2026/04/14-00:56:01.513358 7f6833fff6c0 Manual compaction at level-1 from '!scenes!Jr7lGxYk2RETlXRv' @ 72057594037927935 : 1 .. '!scenes.tokens.delta.items!Jr7lGxYk2RETlXRv.6urwC5SVcou6UOAG.CTg4yBE12iMee1RU.BYT1CrA37R3Og0nu' @ 0 : 0; will stop at (end) +2026/04/14-10:43:54.317254 7fddd9fbf6c0 Recovering log #72 +2026/04/14-10:43:54.326872 7fddd9fbf6c0 Delete type=3 #70 +2026/04/14-10:43:54.326932 7fddd9fbf6c0 Delete type=0 #72 diff --git a/packs-system/scenes/MANIFEST-000074 b/packs-system/scenes/MANIFEST-000074 deleted file mode 100644 index be9becb..0000000 Binary files a/packs-system/scenes/MANIFEST-000074 and /dev/null differ diff --git a/packs-system/scenes/MANIFEST-000076 b/packs-system/scenes/MANIFEST-000076 new file mode 100644 index 0000000..978fbf7 Binary files /dev/null and b/packs-system/scenes/MANIFEST-000076 differ diff --git a/styles/global.less b/styles/global.less index d754a89..7c7c5dc 100644 --- a/styles/global.less +++ b/styles/global.less @@ -16,6 +16,7 @@ --cel-border: #7a5c20; // bordure dorée --cel-accent: #6b1e28; // bordeaux profond (échecs, accents) + --cel-text: #2f2413; // texte de corps sur fond clair (parchemin) --cel-shadow: rgba(10,15,10,0.5); diff --git a/styles/roll.less b/styles/roll.less index bcb0825..a133f60 100644 --- a/styles/roll.less +++ b/styles/roll.less @@ -30,7 +30,7 @@ .roll-actor { font-family: var(--cel-font-title, "CopaseticNF", serif); color: var(--cel-orange-light, #ddb84a); - font-size: 0.78em; + font-size: 0.82em; letter-spacing: 0.07em; text-transform: uppercase; opacity: 0.9; @@ -38,7 +38,7 @@ .roll-skill-line { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 1.25em; + font-size: 1.31em; color: var(--cel-cream, #f0e8d4); margin-top: 2px; @@ -58,24 +58,24 @@ justify-content: center; flex-wrap: wrap; gap: 4px; - font-size: 0.82em; + font-size: 0.86em; color: var(--cel-cream, #f0e8d4); .dval, .nb-dice { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 1.7em; + font-size: 1.78em; color: var(--cel-orange, #e07b00); font-weight: bold; line-height: 1; } - .dlabel { font-size: 0.78em; text-transform: uppercase; letter-spacing: 0.04em; opacity: 0.75; } + .dlabel { font-size: 0.82em; text-transform: uppercase; letter-spacing: 0.04em; opacity: 0.75; } .dminus { color: #f0a0a0; font-weight: bold; } .deq { opacity: 0.55; } .ddice { color: var(--cel-orange, #e07b00); } } .wound-info { - font-size: 0.73em; + font-size: 0.77em; color: #f0a0a0; margin-top: 3px; } @@ -117,17 +117,17 @@ display: flex; align-items: center; justify-content: center; - font-size: 0.65em; + font-size: 0.68em; color: white; } } } - .moon-icon { font-size: 1.2em; flex-shrink: 0; } + .moon-icon { font-size: 1.26em; flex-shrink: 0; } .moon-text { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 0.88em; + font-size: 0.92em; color: var(--cel-green, #0c4c0c); } } @@ -152,7 +152,7 @@ label { flex: 0 0 110px; - font-size: 0.78em; + font-size: 0.82em; text-transform: uppercase; letter-spacing: 0.04em; color: var(--cel-border, #7a5c20); @@ -165,8 +165,8 @@ padding: 3px 7px; background: rgba(255,255,255,0.85); font-family: inherit; - font-size: 0.85em; - color: #333; + font-size: 0.89em; + color: var(--cel-text, #2f2413); &:focus { outline: 1px solid var(--cel-orange, #e07b00); } } @@ -233,7 +233,7 @@ display: flex; align-items: center; justify-content: center; - font-size: 0.65em; + font-size: 0.68em; color: white; } } @@ -242,7 +242,7 @@ } .destin-icon { - font-size: 1.1em; + font-size: 1.16em; color: var(--cel-orange, #e07b00); flex-shrink: 0; } @@ -252,20 +252,20 @@ .destin-main { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 0.9em; + font-size: 0.95em; color: var(--cel-green, #0c4c0c); display: block; } .destin-bonus { - font-size: 0.72em; + font-size: 0.76em; color: var(--cel-border, #7a5c20); font-style: italic; } } .destin-count { - font-size: 0.75em; + font-size: 0.79em; font-weight: bold; color: var(--cel-green, #0c4c0c); background: rgba(196,154,26,0.2); @@ -275,7 +275,7 @@ white-space: nowrap; &.no-destin { - color: #888; + color: rgba(0,0,0,0.45); background: rgba(0,0,0,0.05); border-color: rgba(0,0,0,0.1); } @@ -283,7 +283,7 @@ } } - .form-visibility label { color: #888; } + .form-visibility label { color: rgba(0,0,0,0.45); } .form-faction-aspect select { font-weight: bold; @@ -326,7 +326,7 @@ display: flex; align-items: center; justify-content: center; - font-size: 0.75em; + font-size: 0.79em; color: white; } } @@ -338,19 +338,19 @@ flex: 1; .puiser-main { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 0.9em; + font-size: 0.95em; color: var(--cel-accent, #6b1e28); display: block; } .puiser-sub { - font-size: 0.7em; - color: #888; + font-size: 0.73em; + color: rgba(0,0,0,0.45); font-style: italic; } } .puiser-cost { - font-size: 0.8em; + font-size: 0.84em; font-weight: bold; color: var(--cel-accent, #6b1e28); background: rgba(107,30,40,0.1); @@ -398,14 +398,14 @@ display: flex; align-items: center; justify-content: center; - font-size: 0.6em; + font-size: 0.63em; color: white; } } } .fortune-icon { - font-size: 1.1em; + font-size: 1.16em; color: var(--cel-green, #0c4c0c); flex-shrink: 0; } @@ -414,19 +414,19 @@ flex: 1; .fortune-main { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 0.9em; + font-size: 0.95em; color: var(--cel-green, #0c4c0c); display: block; } .fortune-bonus { - font-size: 0.72em; + font-size: 0.76em; color: var(--cel-border, #7a5c20); font-style: italic; } } .fortune-badge { - font-size: 0.8em; + font-size: 0.84em; font-weight: bold; color: var(--cel-green, #0c4c0c); background: rgba(12,76,12,0.12); @@ -450,7 +450,7 @@ gap: 10px; .preview-label { - font-size: 0.7em; + font-size: 0.73em; text-transform: uppercase; letter-spacing: 0.07em; color: var(--cel-border, #7a5c20); @@ -459,7 +459,7 @@ .preview-formula { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 1.6em; + font-size: 1.68em; color: var(--cel-orange, #e07b00); font-weight: bold; letter-spacing: 0.04em; @@ -469,6 +469,90 @@ // ─── Chat message ───────────────────────────────────────────────────────────── +// ── Contreparties dé de lune (partagé : chat-roll + moon-standalone-card) ── +.celestopol.chat-roll, +.celestopol-roll.moon-standalone-card { + .moon-effect-actions { + padding: 6px 10px 8px; + border-top: 2px solid rgba(122,92,32,0.18); + background: rgba(12,76,12,0.04); + border-radius: 0 0 3px 3px; + + .moon-effect-label { + display: block; + font-family: var(--cel-font-title); + font-size: 0.76em; + font-weight: bold; + color: var(--cel-border, #7a5c20); + text-transform: uppercase; + letter-spacing: 0.07em; + margin-bottom: 6px; + } + + .moon-effect-buttons { + display: flex; + flex-wrap: wrap; + gap: 5px; + align-items: center; + } + + .moon-effect-btn { + font-family: var(--cel-font-title); + font-size: 0.82em; + font-weight: bold; + padding: 4px 11px; + border-radius: 4px; + cursor: pointer; + transition: filter 0.12s, opacity 0.12s; + line-height: 1.4; + letter-spacing: 0.02em; + // Positif par défaut : vert jade / or + background: var(--cel-green, #1b3828); + color: var(--cel-orange-light, #ddb84a); + border: 1px solid rgba(196,154,26,0.35); + + &:hover:not(:disabled) { filter: brightness(1.18); } + &:disabled { opacity: 0.55; cursor: not-allowed; } + + &.moon-effect-negative { + background: var(--cel-accent, #6b1e28); + color: var(--cel-cream, #f0e8d4); + border-color: rgba(139,30,46,0.4); + &:hover:not(:disabled) { filter: brightness(1.12); } + } + } + + .moon-effect-narrative { + font-size: 0.76em; + color: var(--cel-border, #7a5c20); + font-style: italic; + align-self: center; + padding-left: 2px; + } + + .moon-effect-applied-status { + display: inline-flex; + align-items: center; + gap: 4px; + margin-top: 6px; + font-size: 0.8em; + font-family: var(--cel-font-title); + font-style: italic; + padding: 3px 9px; + border-radius: 3px; + color: var(--cel-green, #1b3828); + background: rgba(12,76,12,0.09); + border: 1px solid rgba(12,76,12,0.22); + + &.is-negative { + color: var(--cel-accent, #6b1e28); + background: rgba(107,30,40,0.09); + border-color: rgba(107,30,40,0.25); + } + } + } +} + .celestopol.chat-roll { border: 1px solid var(--cel-border, #7a5c20); border-radius: 3px; @@ -506,16 +590,16 @@ color: var(--cel-orange, #e07b00); font-weight: bold; letter-spacing: 0.05em; - font-size: 0.92em; + font-size: 0.97em; } .skill-info { color: var(--cel-cream, #f0e8d4); - font-size: 0.77em; + font-size: 0.81em; font-style: italic; .stat-lbl { color: var(--cel-orange-light, #ddb84a); } .sep { margin: 0 2px; opacity: 0.5; } } - .wound-info { font-size: 0.7em; color: #f0a0a0; } + .wound-info { font-size: 0.73em; color: #f0a0a0; } } .moon-badge { display: none; } @@ -540,10 +624,10 @@ border-radius: 4px; background: white; font-weight: bold; - font-size: 1.05em; + font-size: 1.1em; font-family: var(--cel-font-title, "CopaseticNF", serif); box-shadow: 1px 1px 2px rgba(0,0,0,0.12); - color: #222; + color: var(--cel-text, #2f2413); &.max { background: var(--cel-green, #0c4c0c); @@ -569,15 +653,15 @@ padding: 5px 10px 4px; background: var(--cel-cream, #f0e8d4); border-top: 1px solid rgba(122,92,32,0.2); - font-size: 0.83em; + font-size: 0.87em; color: #555; - .fl-label { color: #999; font-size: 0.88em; text-transform: uppercase; letter-spacing: 0.04em; margin-right: 2px; } + .fl-label { color: rgba(0,0,0,0.4); font-size: 0.92em; text-transform: uppercase; letter-spacing: 0.04em; margin-right: 2px; } .fl-ndice { color: var(--cel-green, #0c4c0c); font-weight: bold; } - .fl-sum { font-weight: bold; color: #333; } + .fl-sum { font-weight: bold; color: var(--cel-text, #2f2413); } .fl-total { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 1.5em; + font-size: 1.58em; color: var(--cel-orange, #e07b00); font-weight: bold; line-height: 1; @@ -588,8 +672,8 @@ .fl-asp { color: var(--cel-orange, #e07b00); font-weight: bold; } .fl-faction { color: var(--cel-green, #0c4c0c); font-weight: bold; } .fl-sep { font-weight: bold; color: var(--cel-border, #7a5c20); margin: 0 2px; } - .fl-eq { color: #aaa; } - .fl-op { color: #aaa; } + .fl-eq { color: rgba(0,0,0,0.35); } + .fl-op { color: rgba(0,0,0,0.35); } } // ── Seuil et marge ── @@ -600,22 +684,22 @@ padding: 5px 12px 6px; background: var(--cel-cream, #f0e8d4); border-top: 1px solid rgba(122,92,32,0.2); - font-size: 0.82em; + font-size: 0.86em; .vs-wrap { display: flex; align-items: baseline; gap: 5px; } - .vs-label { color: #aaa; text-transform: uppercase; font-size: 0.8em; } + .vs-label { color: rgba(0,0,0,0.35); text-transform: uppercase; font-size: 0.84em; } .diff-label{ font-style: italic; color: var(--cel-green, #0c4c0c); } - .diff-val { color: #888; } + .diff-val { color: rgba(0,0,0,0.45); } .margin-badge { padding: 2px 10px; border-radius: 12px; font-weight: bold; - font-size: 1.05em; + font-size: 1.1em; font-family: var(--cel-font-title, "CopaseticNF", serif); letter-spacing: 0.05em; @@ -635,7 +719,7 @@ // ── Destin utilisé ── .used-info { text-align: center; - font-size: 0.77em; + font-size: 0.81em; color: var(--cel-orange, #e07b00); padding: 3px 8px; background: rgba(196,154,26,0.1); @@ -673,7 +757,7 @@ } .damage-header { - font-size: 0.72em; + font-size: 0.76em; text-transform: uppercase; letter-spacing: 0.08em; color: var(--cel-border, #7a5c20); @@ -690,13 +774,13 @@ .damage-value { font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 1.9em; + font-size: 1.99em; line-height: 1; color: var(--cel-orange, #e07b00); } .damage-unit { - font-size: 0.82em; + font-size: 0.86em; color: var(--cel-green, #0c4c0c); font-weight: bold; } @@ -704,7 +788,7 @@ .damage-breakdown, .damage-note { margin-top: 6px; - font-size: 0.76em; + font-size: 0.8em; line-height: 1.4; color: #5c4630; } @@ -730,7 +814,7 @@ background: var(--cel-green, #0c4c0c); color: var(--cel-orange-light, #ddb84a); padding: 4px 10px; - font-size: 0.78em; + font-size: 0.82em; font-weight: bold; cursor: pointer; @@ -745,7 +829,7 @@ margin-top: 8px; padding: 6px 8px; border-radius: 4px; - font-size: 0.76em; + font-size: 0.8em; line-height: 1.4; &.is-applied { @@ -774,7 +858,7 @@ background: rgba(12,76,12,0.1); color: var(--cel-green, #0c4c0c); font-weight: bold; - font-size: 0.9em; + font-size: 0.95em; } // ── Résultat dé de lune ── @@ -787,7 +871,7 @@ font-family: var(--cel-font-body, serif); .moon-die-face { - font-size: 1.8em; + font-size: 1.89em; line-height: 1; flex-shrink: 0; } @@ -800,7 +884,7 @@ } .moon-die-phase { - font-size: 0.72em; + font-size: 0.76em; opacity: 0.75; text-transform: uppercase; letter-spacing: 0.05em; @@ -815,7 +899,7 @@ } .moon-die-desc { - font-size: 0.72em; + font-size: 0.76em; font-style: italic; opacity: 0.85; line-height: 1.3; @@ -852,13 +936,13 @@ border-top: 2px solid rgba(0,0,0,0.1); .result-icon { - font-size: 0.85em; + font-size: 0.89em; opacity: 0.85; letter-spacing: 0.15em; } - .result-label { font-size: 1.2em; line-height: 1.2; } + .result-label { font-size: 1.26em; line-height: 1.2; } .result-desc { - font-size: 0.65em; + font-size: 0.68em; letter-spacing: 0.08em; margin-top: 2px; opacity: 0.8; @@ -919,22 +1003,22 @@ .welcome-mark { color: var(--cel-orange, #e07b00); - font-size: 1.05em; + font-size: 1.1em; line-height: 1; } .welcome-title { font-family: var(--cel-font-title, "CopaseticNF", serif); color: var(--cel-orange, #e07b00); - font-size: 0.98em; + font-size: 1.03em; letter-spacing: 0.05em; text-transform: uppercase; } .welcome-body { padding: 9px 11px 10px; - color: #3f3623; - font-size: 0.84em; + color: var(--cel-text, #2f2413); + font-size: 0.88em; line-height: 1.45; p { @@ -954,7 +1038,7 @@ display: block; margin-bottom: 2px; color: var(--cel-border, #7a5c20); - font-size: 0.72em; + font-size: 0.76em; font-weight: bold; letter-spacing: 0.05em; text-transform: uppercase; @@ -997,27 +1081,27 @@ .portrait-message-mark { color: var(--cel-orange, #e07b00); - font-size: 1.05em; + font-size: 1.1em; line-height: 1; } .portrait-message-title { font-family: var(--cel-font-title, "CopaseticNF", serif); color: var(--cel-orange, #e07b00); - font-size: 0.98em; + font-size: 1.03em; letter-spacing: 0.05em; text-transform: uppercase; } .portrait-message-body { padding: 9px 11px 10px; - color: #3f3623; + color: var(--cel-text, #2f2413); } .portrait-message-name { margin-bottom: 8px; color: var(--cel-green, #0c4c0c); - font-size: 0.84em; + font-size: 0.88em; font-weight: bold; letter-spacing: 0.04em; text-transform: uppercase; @@ -1100,7 +1184,7 @@ &:hover { border-color: var(--cel-orange, #e07b00); background: linear-gradient(180deg, rgba(224,123,0,0.18), rgba(224,123,0,0.06)); - color: #7a3e00; + color: var(--cel-border, #7a5c20); } } } @@ -1124,7 +1208,7 @@ font-family: var(--cel-font-title, "CopaseticNF", serif); text-transform: uppercase; letter-spacing: 0.05em; - font-size: 0.88em; + font-size: 0.92em; } .faction-aspect-points { @@ -1132,7 +1216,7 @@ flex-wrap: wrap; gap: 5px; margin-bottom: 4px; - font-size: 0.8em; + font-size: 0.84em; } .faction-aspect-point-card { @@ -1146,7 +1230,7 @@ border: 1px solid rgba(122,92,32,0.18); strong { - font-size: 0.72em; + font-size: 0.76em; text-transform: uppercase; letter-spacing: 0.04em; color: var(--cel-border, #7a5c20); @@ -1155,14 +1239,14 @@ em { font-style: normal; font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 1.05em; + font-size: 1.1em; color: var(--cel-orange, #e07b00); line-height: 1; } } .faction-aspect-source-line { - font-size: 0.78em; + font-size: 0.82em; color: var(--cel-border, #7a5c20); } @@ -1171,8 +1255,8 @@ border-left: 3px solid #b84a2e; border-radius: 4px; background: rgba(184, 74, 46, 0.08); - color: #8b3e2b; - font-size: 0.8em; + color: var(--cel-accent, #6b1e28); + font-size: 0.84em; } .faction-aspect-tag-list, @@ -1190,7 +1274,7 @@ background: rgba(12, 76, 12, 0.08); border: 1px solid rgba(12, 76, 12, 0.18); color: var(--cel-green, #0c4c0c); - font-size: 0.72em; + font-size: 0.76em; font-weight: bold; } @@ -1204,7 +1288,7 @@ label { display: block; margin-bottom: 2px; - font-size: 0.68em; + font-size: 0.71em; text-transform: uppercase; letter-spacing: 0.04em; color: var(--cel-border, #7a5c20); @@ -1219,13 +1303,13 @@ border-radius: 3px; padding: 2px 6px; background: rgba(255,255,255,0.9); - font-size: 0.78em; - color: #2f2413; + font-size: 0.82em; + color: var(--cel-text, #2f2413); box-sizing: border-box; } select option { - color: #2f2413; + color: var(--cel-text, #2f2413); background: #fffaf0; } } @@ -1251,7 +1335,7 @@ background: rgba(224,123,0,0.12); color: var(--cel-orange, #e07b00); font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 0.72em; + font-size: 0.76em; line-height: 1; cursor: help; vertical-align: middle; @@ -1273,7 +1357,7 @@ color: var(--cel-orange, #e07b00); font-family: var(--cel-font-title, "CopaseticNF", serif); margin-bottom: 4px; - font-size: 0.82em; + font-size: 0.86em; } } @@ -1281,7 +1365,7 @@ display: flex; align-items: center; gap: 4px; - font-size: 0.74em; + font-size: 0.78em; } .faction-aspect-active-list { @@ -1298,8 +1382,8 @@ padding: 3px 6px; border-radius: 4px; background: rgba(255,255,255,0.7); - color: #2f2413; - font-size: 0.76em; + color: var(--cel-text, #2f2413); + font-size: 0.8em; &.is-relevant { border-left: 3px solid var(--cel-green, #0c4c0c); @@ -1307,20 +1391,20 @@ } .faction-aspect-active-name { - color: #2f2413; + color: var(--cel-text, #2f2413); font-weight: 600; } .faction-aspect-active-value { color: var(--cel-orange, #e07b00); font-family: var(--cel-font-title, "CopaseticNF", serif); - font-size: 0.92em; + font-size: 0.97em; } .faction-aspect-empty { - color: #666; + color: rgba(0,0,0,0.5); font-style: italic; - font-size: 0.74em; + font-size: 0.78em; } .faction-aspect-remove-block { @@ -1349,7 +1433,7 @@ border-left: 3px solid #c0392b; border-radius: 4px; color: #f0c0c0; - font-size: 0.85em; + font-size: 0.89em; .wound-icon { font-size: 1em; } } } @@ -1358,7 +1442,7 @@ .celestopol.chat-roll { .roll-result-banner.tie { background: #3a2e1a; - color: #d4b870; + color: var(--cel-orange-light, #ddb84a); border-top: 2px solid #7a6230; border-bottom: 2px solid #7a6230; text-shadow: 0 1px 2px rgba(0,0,0,0.6); @@ -1369,12 +1453,12 @@ align-items: center; gap: 0.3em; margin-bottom: 1px; - font-size: 0.85em; + font-size: 0.89em; color: var(--cel-orange, #e07b00); - .weapon-icon-small { font-size: 0.9em; } + .weapon-icon-small { font-size: 0.95em; } .weapon-degats-small { font-weight: bold; - color: #f0c060; + color: var(--cel-border, #7a5c20); } } } @@ -1386,20 +1470,20 @@ align-items: center; gap: 0.4em; margin-bottom: 2px; - font-size: 0.9em; + font-size: 0.95em; color: var(--cel-orange, #e07b00); .weapon-icon { font-size: 1em; } .weapon-degats { font-weight: bold; - color: #f0c060; - font-size: 0.85em; + color: var(--cel-border, #7a5c20); + font-size: 0.89em; } } .form-corps-pnj { .corps-pnj-input { width: 70px; - font-size: 1.1em; + font-size: 1.16em; font-weight: bold; text-align: center; font-family: var(--cel-font-title, "CopaseticNF", serif); @@ -1420,7 +1504,7 @@ label { color: var(--cel-orange, #e07b00); font-weight: bold; - font-size: 0.85em; + font-size: 0.89em; display: flex; align-items: center; gap: 5px; @@ -1435,7 +1519,7 @@ border: 1px solid rgba(196, 154, 26, 0.5); border-radius: 3px; padding: 2px 4px; - font-size: 0.85em; + font-size: 0.89em; max-width: 200px; } } @@ -1451,7 +1535,7 @@ align-items: center; gap: 6px; color: var(--cel-orange, #e07b00); - font-size: 0.88em; + font-size: 0.92em; font-style: italic; i { opacity: 0.8; } @@ -1465,14 +1549,14 @@ padding: 4px 8px; label { - color: #e08060; - font-size: 0.85em; + color: var(--cel-accent, #6b1e28); + font-size: 0.89em; font-weight: bold; display: flex; align-items: center; gap: 5px; - i { color: #e08060; } + i { color: var(--cel-accent, #6b1e28); } } select { @@ -1482,13 +1566,13 @@ border: 1px solid rgba(200, 100, 60, 0.4); border-radius: 3px; padding: 2px 4px; - font-size: 0.85em; + font-size: 0.89em; } } .form-threshold-fixed { .threshold-value { - font-size: 1.2em; + font-size: 1.26em; font-weight: bold; font-family: var(--cel-font-title, "CopaseticNF", serif); color: var(--cel-orange, #e07b00); @@ -1514,7 +1598,7 @@ input[type="checkbox"] { flex-shrink: 0; } .opposition-icon { - font-size: 1.2em; + font-size: 1.26em; color: var(--cel-orange, #e07b00); } @@ -1525,13 +1609,13 @@ .opposition-main { font-weight: bold; - font-size: 0.9em; + font-size: 0.95em; font-family: var(--cel-font-title, "CopaseticNF", serif); color: var(--cel-orange, #e07b00); } .opposition-sub { - font-size: 0.75em; + font-size: 0.79em; opacity: 0.7; font-style: italic; } @@ -1575,7 +1659,7 @@ } .moon-standalone-actor { - font-size: 0.85em; + font-size: 0.89em; color: var(--cel-text, #333); font-style: italic; } @@ -1604,21 +1688,21 @@ .moon-standalone-phase { font-family: var(--cel-font-title); - font-size: 0.95em; + font-size: 1.0em; font-weight: bold; color: var(--cel-text, #333); } .moon-standalone-value { - font-size: 0.8em; + font-size: 0.84em; color: var(--cel-text-light, #666); font-style: italic; } &.moon-triomphe { border-left-color: var(--cel-green, #0c4c0c); } &.moon-brio { border-left-color: var(--cel-border, #7a5c20); } - &.moon-contrecoup { border-left-color: #c07800; } - &.moon-catastrophe{ border-left-color: #8b1e2e; } + &.moon-contrecoup { border-left-color: var(--cel-orange, #c49a1a); } + &.moon-catastrophe{ border-left-color: var(--cel-accent, #6b1e28); } } .moon-interpret-row { @@ -1627,15 +1711,15 @@ gap: 8px; .moon-interpret-label { - font-size: 0.72em; + font-size: 0.76em; text-transform: uppercase; letter-spacing: 0.07em; - color: #888; + color: rgba(0,0,0,0.45); white-space: nowrap; } .moon-fortune { - font-size: 0.85em; + font-size: 0.89em; font-weight: bold; border-radius: 3px; padding: 1px 8px; @@ -1648,7 +1732,7 @@ &.mauvaise-fortune { background: rgba(139, 30, 46, 0.1); - color: #8b1e2e; + color: var(--cel-accent, #6b1e28); border: 1px solid rgba(139,30,46,0.3); } } @@ -1659,6 +1743,7 @@ margin-top: 2px; padding: 6px 8px; } + } // ── Message d'initiative ────────────────────────────────────────────────────── @@ -1698,11 +1783,11 @@ color: var(--cel-orange, #e07b00); font-weight: bold; letter-spacing: 0.05em; - font-size: 0.92em; + font-size: 0.97em; } .skill-info { color: var(--cel-cream, #f0e8d4); - font-size: 0.77em; + font-size: 0.81em; font-style: italic; } } @@ -1730,19 +1815,19 @@ } .initiative-icon { - font-size: 1.1em; + font-size: 1.16em; opacity: 0.9; font-style: normal; } .initiative-score { - font-size: 2.4em; + font-size: 2.52em; font-weight: bold; line-height: 1; } .initiative-detail { - font-size: 0.65em; + font-size: 0.68em; opacity: 0.75; font-style: italic; font-family: var(--cel-font-body, serif); diff --git a/templates/chat-message.hbs b/templates/chat-message.hbs index c32e799..b92f2e3 100644 --- a/templates/chat-message.hbs +++ b/templates/chat-message.hbs @@ -122,7 +122,7 @@ {{/if}} - {{!-- Résultat du Dé de la Lune (narratif) --}} + {{!-- Résultat du Dé de la Lune (narratif + choix de contrepartie) --}} {{#if hasMoonDie}}