From 56c4a2805f50ea4d0684f45791b4d74239b814be Mon Sep 17 00:00:00 2001 From: Murilo Brito <91566541+moliloo@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:59:31 -0300 Subject: [PATCH] [FEATURE] #149 - New style for character sheets (#172) * new style for character sheets * Added nowrap on level label --------- Co-authored-by: WBHarry --- assets/svg/experience-shield-light.svg | 3 + assets/svg/experience-shield.svg | 3 + assets/svg/trait-shield-light.svg | 3 + assets/svg/trait-shield.svg | 3 + daggerheart.mjs | 5 + lang/en.json | 41 +- module/applications/sheets/character.mjs | 97 ++- module/config/generalConfig.mjs | 12 +- module/data/actor/character.mjs | 11 +- module/helpers/handlebarsHelper.mjs | 37 +- styles/daggerheart.css | 744 +++++++++++++++++- styles/daggerheart.less | 19 +- styles/less/actors/character.less | 11 + styles/less/actors/character/biography.less | 20 + styles/less/actors/character/features.less | 20 + styles/less/actors/character/header.less | 157 ++++ styles/less/actors/character/inventory.less | 65 ++ styles/less/actors/character/loadout.less | 101 +++ styles/less/actors/character/sheet.less | 32 + styles/less/actors/character/sidebar.less | 283 +++++++ styles/less/global/elements.less | 39 +- .../less/global/inventory-fieldset-items.less | 17 + styles/less/global/inventory-item.less | 133 ++++ styles/less/global/sheet.less | 27 +- styles/less/global/tab-actions.less | 3 - styles/less/global/tab-effects.less | 3 - styles/less/global/tab-navigation.less | 2 - styles/less/items/class.less | 3 - styles/less/utils/colors.less | 17 +- styles/pc.less | 6 + .../sheets/actors/character/biography.hbs | 36 + templates/sheets/actors/character/effects.hbs | 8 + .../sheets/actors/character/features.hbs | 20 + templates/sheets/actors/character/header.hbs | 111 +++ .../sheets/actors/character/inventory.hbs | 42 + templates/sheets/actors/character/loadout.hbs | 28 + templates/sheets/actors/character/sidebar.hbs | 120 +++ templates/sheets/character/character.hbs | 8 +- .../global/partials/domain-card-item.hbs | 32 + .../partials/inventory-fieldset-items.hbs | 49 ++ .../sheets/global/partials/inventory-item.hbs | 130 +++ templates/sheets/items/domainCard/header.hbs | 8 +- 42 files changed, 2399 insertions(+), 110 deletions(-) create mode 100644 assets/svg/experience-shield-light.svg create mode 100644 assets/svg/experience-shield.svg create mode 100644 assets/svg/trait-shield-light.svg create mode 100644 assets/svg/trait-shield.svg create mode 100644 styles/less/actors/character/biography.less create mode 100644 styles/less/actors/character/features.less create mode 100644 styles/less/actors/character/header.less create mode 100644 styles/less/actors/character/inventory.less create mode 100644 styles/less/actors/character/loadout.less create mode 100644 styles/less/actors/character/sheet.less create mode 100644 styles/less/actors/character/sidebar.less create mode 100644 styles/less/global/inventory-fieldset-items.less create mode 100644 styles/less/global/inventory-item.less create mode 100644 templates/sheets/actors/character/biography.hbs create mode 100644 templates/sheets/actors/character/effects.hbs create mode 100644 templates/sheets/actors/character/features.hbs create mode 100644 templates/sheets/actors/character/header.hbs create mode 100644 templates/sheets/actors/character/inventory.hbs create mode 100644 templates/sheets/actors/character/loadout.hbs create mode 100644 templates/sheets/actors/character/sidebar.hbs create mode 100644 templates/sheets/global/partials/domain-card-item.hbs create mode 100644 templates/sheets/global/partials/inventory-fieldset-items.hbs create mode 100644 templates/sheets/global/partials/inventory-item.hbs diff --git a/assets/svg/experience-shield-light.svg b/assets/svg/experience-shield-light.svg new file mode 100644 index 00000000..bede0e26 --- /dev/null +++ b/assets/svg/experience-shield-light.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/svg/experience-shield.svg b/assets/svg/experience-shield.svg new file mode 100644 index 00000000..ffd897ab --- /dev/null +++ b/assets/svg/experience-shield.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/svg/trait-shield-light.svg b/assets/svg/trait-shield-light.svg new file mode 100644 index 00000000..dc6f77c3 --- /dev/null +++ b/assets/svg/trait-shield-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/trait-shield.svg b/assets/svg/trait-shield.svg new file mode 100644 index 00000000..87c18dd7 --- /dev/null +++ b/assets/svg/trait-shield.svg @@ -0,0 +1,3 @@ + + + diff --git a/daggerheart.mjs b/daggerheart.mjs index 2b25ce77..99eceed5 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -272,6 +272,11 @@ Hooks.on('renderJournalDirectory', async (tab, html, _, options) => { const preloadHandlebarsTemplates = async function () { return foundry.applications.handlebars.loadTemplates([ + 'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs', + 'systems/daggerheart/templates/sheets/global/partials/inventory-item.hbs', + 'systems/daggerheart/templates/sheets/global/partials/domain-card-item.hbs', + 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs', + 'systems/daggerheart/templates/sheets/parts/attributes.hbs', 'systems/daggerheart/templates/sheets/parts/defense.hbs', 'systems/daggerheart/templates/sheets/parts/armor.hbs', diff --git a/lang/en.json b/lang/en.json index e4ad9cd5..d91fe61a 100755 --- a/lang/en.json +++ b/lang/en.json @@ -274,17 +274,17 @@ "SpellcastingTrait": "Spellcasting Trait" }, "Condition": { - "Vulnerable": { - "Name": "Vulnerable", - "Description": "While a creature is Vulnerable, all rolls targeting them have advantage.\nA creature who is already Vulnerable can’t be made to take the condition again." + "vulnerable": { + "name": "Vulnerable", + "description": "While a creature is Vulnerable, all rolls targeting them have advantage.\nA creature who is already Vulnerable can’t be made to take the condition again." }, - "Hidden": { - "Name": "Hidden", - "Description": "While Hidden, attacks cannot be made directly targeting them nd any rolls against them are at disadvantage.\nWhen a Hidden creature moves or attacks, they are no longer Hidden. However, if a creature is Hidden when they begin making an attack, the roll has advantage; the Hidden condition isn’t cleared until after the attack is resolved." + "hidden": { + "name": "Hidden", + "description": "While Hidden, attacks cannot be made directly targeting them nd any rolls against them are at disadvantage.\nWhen a Hidden creature moves or attacks, they are no longer Hidden. However, if a creature is Hidden when they begin making an attack, the roll has advantage; the Hidden condition isn’t cleared until after the attack is resolved." }, - "Restrained": { - "Name": "Restrained", - "Description": "When an effect makes a creature Restrained, it means they cannot move until this condition is cleared.\nThey can still take actions from their current position." + "restrained": { + "name": "Restrained", + "description": "When an effect makes a creature Restrained, it means they cannot move until this condition is cleared.\nThey can still take actions from their current position." } }, "Tiers": { @@ -1074,6 +1074,8 @@ "PC": { "Name": "Name", "Pronouns": "Pronouns", + "age": "Age", + "faith": "Faith", "ShortRest": "Take a Short Rest", "LongRest": "Take a Long Rest", "Level": "Level", @@ -1085,7 +1087,9 @@ "Loadout": "Loadout", "Vault": "Vault", "Heritage": "Heritage", - "Story": "Story" + "Story": "Story", + "biography": "Biography", + "effects": "Effects" }, "Armor": { "Title": "Active Armor" @@ -1164,6 +1168,7 @@ "BackgroundTitle": "Background", "AppearanceTitle": "Appearance", "ConnectionsTitle": "Connections", + "characteristics": "Characteristics", "Scars": { "Title": "Scars" } @@ -1323,7 +1328,9 @@ }, "Global": { "Actions": "Actions", - "Effects": "Effects" + "Effects": "Effects", + "activeEffects": "Active Effects", + "inativeEffects": "Inative Effects" }, "DomainCard": { "Type": "Type", @@ -1414,6 +1421,10 @@ } }, "Effects": { + "duration": { + "passive": "Passive", + "temporary": "Temporary" + }, "Types": { "health": { "Name": "Health" @@ -1439,7 +1450,13 @@ }, "Tooltip": { "openItemWorld": "Open Item World", - "delete": "Delete" + "sendToChat": "Send to Chat", + "moreOptions": "More Options", + "equip": "Equip", + "unequip": "Unequip", + "delete": "Delete", + "sendToVault": "Send to Vault", + "sendToLoadout": "Send to Loadout" }, "Actions": { "Types": { diff --git a/module/applications/sheets/character.mjs b/module/applications/sheets/character.mjs index 0c98d2bc..76a8c603 100644 --- a/module/applications/sheets/character.mjs +++ b/module/applications/sheets/character.mjs @@ -16,8 +16,8 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) { static DEFAULT_OPTIONS = { tag: 'form', - classes: ['daggerheart', 'sheet', 'pc'], - position: { width: 810, height: 1080 }, + classes: ['daggerheart', 'sheet', 'actor', 'dh-style', 'daggerheart', 'character'], + position: { width: 850, height: 800 }, actions: { attributeRoll: this.rollAttribute, toggleMarks: this.toggleMarks, @@ -47,10 +47,10 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) { useAdvancementCard: this.useAdvancementCard, useAdvancementAbility: this.useAdvancementAbility, toggleEquipItem: this.toggleEquipItem, - levelup: this.openLevelUp + levelup: this.openLevelUp, + editImage: this._onEditImage }, window: { - minimizable: false, resizable: true }, form: { @@ -66,9 +66,76 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) { }; static PARTS = { - form: { - id: 'character', - template: 'systems/daggerheart/templates/sheets/character/character.hbs' + sidebar: { + id: 'sidebar', + template: 'systems/daggerheart/templates/sheets/actors/character/sidebar.hbs' + }, + header: { + id: 'header', + template: 'systems/daggerheart/templates/sheets/actors/character/header.hbs' + }, + features: { + id: 'features', + template: 'systems/daggerheart/templates/sheets/actors/character/features.hbs' + }, + loadout: { + id: 'loadout', + template: 'systems/daggerheart/templates/sheets/actors/character/loadout.hbs' + }, + inventory: { + id: 'inventory', + template: 'systems/daggerheart/templates/sheets/actors/character/inventory.hbs' + }, + biography: { + id: 'biography', + template: 'systems/daggerheart/templates/sheets/actors/character/biography.hbs' + }, + effects: { + id: 'effects', + template: 'systems/daggerheart/templates/sheets/actors/character/effects.hbs' + } + }; + + static TABS = { + features: { + active: true, + cssClass: '', + group: 'primary', + id: 'features', + icon: null, + label: 'DAGGERHEART.Sheets.PC.Tabs.Features' + }, + loadout: { + active: false, + cssClass: '', + group: 'primary', + id: 'loadout', + icon: null, + label: 'DAGGERHEART.Sheets.PC.Tabs.Loadout' + }, + inventory: { + active: false, + cssClass: '', + group: 'primary', + id: 'inventory', + icon: null, + label: 'DAGGERHEART.Sheets.PC.Tabs.Inventory' + }, + biography: { + active: false, + cssClass: '', + group: 'primary', + id: 'biography', + icon: null, + label: 'DAGGERHEART.Sheets.PC.Tabs.biography' + }, + effects: { + active: false, + cssClass: '', + group: 'primary', + id: 'effects', + icon: null, + label: 'DAGGERHEART.Sheets.PC.Tabs.effects' } }; @@ -150,17 +217,29 @@ export default class CharacterSheet extends DaggerheartSheet(ActorSheetV2) { _attachPartListeners(partId, htmlElement, options) { super._attachPartListeners(partId, htmlElement, options); - htmlElement.querySelector('.level-value').addEventListener('change', this.onLevelChange.bind(this)); + // htmlElement.querySelector('.level-value').addEventListener('change', this.onLevelChange.bind(this)); // To Remove when ContextMenu Handler is made htmlElement .querySelectorAll('[data-item-id]') .forEach(element => element.addEventListener('contextmenu', this.editItem.bind(this))); } + static _onEditImage() { + const fp = new FilePicker({ + current: this.document.img, + type: 'image', + redirectToRoot: ['icons/svg/mystery-man.svg'], + callback: async path => this._updateImage.bind(this)(path), + top: this.position.top + 40, + left: this.position.left + 10 + }); + return fp.browse(); + } + async _prepareContext(_options) { const context = await super._prepareContext(_options); context.document = this.document; - context.tabs = this._getTabs(); + context.tabs = super._getTabs(this.constructor.TABS); context.config = SYSTEM; diff --git a/module/config/generalConfig.mjs b/module/config/generalConfig.mjs index 279300fc..18c8aba4 100644 --- a/module/config/generalConfig.mjs +++ b/module/config/generalConfig.mjs @@ -83,21 +83,21 @@ export const healingTypes = { export const conditions = { vulnerable: { id: 'vulnerable', - name: 'DAGGERHEART.Condition.Vulnerable.Name', + name: 'DAGGERHEART.Condition.vulnerable.name', icon: 'icons/magic/control/silhouette-fall-slip-prone.webp', - description: 'DAGGERHEART.Condition.Vulnerable.Description' + description: 'DAGGERHEART.Condition.vulnerable.description' }, hidden: { id: 'hidden', - name: 'DAGGERHEART.Condition.Hidden.Name', + name: 'DAGGERHEART.Condition.hidden.name', icon: 'icons/magic/perception/silhouette-stealth-shadow.webp', - description: 'DAGGERHEART.Condition.Hidden.Description' + description: 'DAGGERHEART.Condition.hidden.description' }, restrained: { id: 'restrained', - name: 'DAGGERHEART.Condition.Restrained.Name', + name: 'DAGGERHEART.Condition.restrained.name', icon: 'icons/magic/control/debuff-chains-shackle-movement-red.webp', - description: 'DAGGERHEART.Condition.Restrained.Description' + description: 'DAGGERHEART.Condition.restrained.description' } }; diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index 273b7a72..7f82ba5a 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -62,14 +62,21 @@ export default class DhCharacter extends BaseDataActor { bags: new fields.NumberField({ initial: 0, integer: true }), chests: new fields.NumberField({ initial: 0, integer: true }) }), - pronouns: new fields.StringField({}), scars: new fields.TypedObjectField( new fields.SchemaField({ name: new fields.StringField({}), description: new fields.HTMLField() }) ), - story: new fields.HTMLField(), + biography: new fields.SchemaField({ + background: new fields.HTMLField(), + connections: new fields.HTMLField(), + characteristics: new fields.SchemaField({ + pronouns: new fields.StringField({}), + age: new fields.StringField({}), + faith: new fields.StringField({}) + }) + }), class: new fields.SchemaField({ value: new ForeignDocumentUUIDField({ type: 'Item', nullable: true }), subclass: new ForeignDocumentUUIDField({ type: 'Item', nullable: true }) diff --git a/module/helpers/handlebarsHelper.mjs b/module/helpers/handlebarsHelper.mjs index 25dd0e5e..6200b690 100644 --- a/module/helpers/handlebarsHelper.mjs +++ b/module/helpers/handlebarsHelper.mjs @@ -13,10 +13,43 @@ export default class RegisterHandlebarsHelpers { signedNumber: this.signedNumber, length: this.length, switch: this.switch, - case: this.case + case: this.case, + eq: this.eq, + ne: this.ne, + lt: this.lt, + gt: this.gt, + lte: this.lte, + gte: this.gte, + and: this.and, + or: this.or }); } + static eq(v1, v2) { + return v1 === v2; + } + static ne(v1, v2) { + return v1 !== v2; + } + static lt(v1, v2) { + return v1 < v2; + } + static gt(v1, v2) { + return v1 > v2; + } + static lte(v1, v2) { + return v1 <= v2; + } + static gte(v1, v2) { + return v1 >= v2; + } + static and() { + return Array.prototype.every.call(arguments, Boolean); + } + static or() { + return Array.prototype.slice.call(arguments, 0, -1).some(Boolean); + } + static times(nr, block) { var accum = ''; for (var i = 0; i < nr; ++i) accum += block.fn(i); @@ -101,7 +134,7 @@ export default class RegisterHandlebarsHelpers { } static debug(a) { - console.log(JSON.stringify(a)); + console.log(a); return a; } } diff --git a/styles/daggerheart.css b/styles/daggerheart.css index 29cdac79..d4b084bd 100755 --- a/styles/daggerheart.css +++ b/styles/daggerheart.css @@ -404,6 +404,8 @@ flex-direction: column; align-items: flex-start; border-radius: 6px; + height: 100px; + width: 100px; } .daggerheart.sheet.pc div[data-application-part] .sheet-body .left-main-container .legend { margin-left: auto; @@ -3442,6 +3444,553 @@ div.daggerheart.views.multiclass { .daggerheart.dh-style.setting .trait-array-container .trait-array-item input { text-align: center; } +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet { + padding: 0 15px; + padding-top: 36px; + width: 100%; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .name-row { + display: flex; + gap: 20px; + align-items: baseline; + justify-content: space-between; + padding: 0; + padding-top: 5px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .name-row input[type='text'] { + font-size: 32px; + height: 42px; + width: 380px; + text-align: start; + border: 1px solid transparent; + outline: 2px solid transparent; + transition: all 0.3s ease; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .name-row input[type='text']:hover { + outline: 2px solid light-dark(#222, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .name-row .level-div { + white-space: nowrap; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-details { + display: flex; + justify-content: space-between; + padding: 5px 0; + margin-bottom: 10px; + font-size: 12px; + color: light-dark(#18162e, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-details span { + padding: 3px; + border-radius: 3px; + transition: all 0.3s ease; + cursor: pointer; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-details span:hover { + background: light-dark(#18162e40, #f3c26740); +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-details span.dot { + background: transparent; + cursor: default; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row { + display: flex; + gap: 20px; + align-items: center; + justify-content: space-between; + padding: 0; + margin-bottom: 15px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .hope-section, +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .threshold-section { + position: relative; + display: flex; + gap: 10px; + background-color: light-dark(transparent, #18162e); + color: light-dark(#18162e, #f3c267); + padding: 5px 10px; + border: 1px solid light-dark(#18162e, #f3c267); + border-radius: 6px; + align-items: center; + width: fit-content; + height: 30px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .hope-section h4, +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .threshold-section h4 { + font-size: 14px; + font-weight: bold; + text-transform: uppercase; + color: light-dark(#18162e, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .hope-section h4.threshold-value, +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .threshold-section h4.threshold-value { + color: light-dark(#222, #efe6d8); +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .hope-section .threshold-legend, +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .threshold-section .threshold-legend { + position: absolute; + bottom: -21px; + color: light-dark(#f3c267, #18162e); + background-color: light-dark(#18162e, #f3c267); + padding: 3px; + justify-self: anchor-center; + border-radius: 0 0 3px 3px; + text-transform: capitalize; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .hope-section .hope-value, +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-row .threshold-section .hope-value { + display: flex; + cursor: pointer; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits { + display: flex; + justify-content: space-between; + padding: 0; + margin-bottom: 15px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait { + height: 60px; + width: 60px; + background: url(../assets/svg/trait-shield.svg) no-repeat; + cursor: pointer; +} +.theme-light .application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait { + background: url('../assets/svg/trait-shield-light.svg') no-repeat; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait .trait-name { + display: flex; + padding-top: 5px; + color: light-dark(#18162e, #f3c267); + font-size: 14px; + font-weight: 600; + align-items: center; + justify-content: center; + gap: 3px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait .trait-name i { + line-height: 17px; + font-size: 10px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-header-sheet .character-traits .trait .trait-value { + font-family: 'Montserrat', sans-serif; + font-style: normal; + font-weight: 400; + font-size: 20px; + text-align: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet { + width: 275px; + min-width: 275px; + border-right: 1px solid light-dark(#18162e, #f3c267); + background-image: url('../assets/parchments/dh-parchment-dark.png'); +} +.theme-light .application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet { + background: transparent; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet img { + height: 235px; + width: 275px; + border-bottom: 1px solid light-dark(#18162e, #f3c267); + cursor: pointer; + object-fit: cover; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section { + position: relative; + display: flex; + flex-direction: column; + top: -20px; + gap: 30px; + margin-bottom: -10px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section { + display: flex; + justify-content: space-evenly; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar { + position: relative; + width: 100px; + height: 40px; + justify-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-label { + position: relative; + top: 40px; + height: 22px; + width: 79px; + clip-path: path('M0 0H79L74 16.5L39 22L4 16.5L0 0Z'); + background: light-dark(#18162e, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-label h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + color: light-dark(#efe6d8, #18162e); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value { + position: absolute; + display: flex; + padding: 0 6px; + font-size: 1.5rem; + align-items: center; + width: 100px; + height: 40px; + justify-content: center; + text-align: center; + z-index: 2; + color: #efe6d8; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'] { + background: transparent; + font-size: 1.5rem; + width: 40px; + height: 30px; + text-align: center; + border: none; + outline: 2px solid transparent; + color: #efe6d8; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input { + padding: 0; + color: #efe6d8; + backdrop-filter: none; + background: transparent; + transition: all 0.3s ease; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input:hover, +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value input[type='number'].bar-input:focus { + background: rgba(24, 22, 46, 0.33); + backdrop-filter: blur(9.5px); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .status-value .bar-label { + width: 40px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar { + position: absolute; + appearance: none; + width: 100px; + height: 40px; + border: 1px solid light-dark(#18162e, #f3c267); + border-radius: 6px; + z-index: 1; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-webkit-progress-bar { + border: none; + background: #18162e; + border-radius: 6px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-webkit-progress-value { + background: linear-gradient(15deg, #46140a 0%, #be0000 42%, #fcb045 100%); + border-radius: 6px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar.stress-color::-webkit-progress-value { + background: linear-gradient(15deg, #823b01 0%, #fc8e45 65%, #be0000 100%); + border-radius: 6px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-moz-progress-value, +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-moz-progress-bar { + border-radius: 6px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar::-moz-progress-bar { + background: linear-gradient(15deg, #46140a 0%, #be0000 42%, #fcb045 100%); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .resources-section .status-bar .progress-bar.stress-color::-moz-progress-bar { + background: linear-gradient(15deg, #823b01 0%, #fc8e45 65%, #be0000 100%); + border-radius: 6px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section { + display: flex; + flex-wrap: wrap; + gap: 5px; + justify-content: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number { + justify-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-value { + position: relative; + display: flex; + width: 50px; + height: 30px; + border: 1px solid light-dark(#18162e, #f3c267); + border-bottom: none; + border-radius: 6px 6px 0 0; + padding: 0 6px; + font-size: 1.2rem; + align-items: center; + justify-content: center; + background: light-dark(transparent, #18162e); + z-index: 2; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-value.armor-slots { + width: 80px; + height: 30px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-label { + padding: 2px 10px; + width: 100%; + border-radius: 3px; + background: light-dark(#18162e, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .info-section .status-section .status-number .status-label h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + font-size: 12px; + color: light-dark(#efe6d8, #18162e); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .items-sidebar-list { + display: flex; + flex-direction: column; + gap: 5px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .items-sidebar-list .inventory-item { + padding: 0 10px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .equipment-section .title { + display: flex; + gap: 15px; + align-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .equipment-section .title h3 { + font-size: 20px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .equipment-section .items-list { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .loadout-section .title { + display: flex; + gap: 15px; + align-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .loadout-section .title h3 { + font-size: 20px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .title { + display: flex; + gap: 15px; + align-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .title h3 { + font-size: 20px; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list { + display: flex; + flex-direction: column; + gap: 5px; + width: 100%; + margin-top: 10px; + align-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-row { + display: flex; + gap: 5px; + width: 250px; + align-items: center; + justify-content: space-between; +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-row input[type='text'] { + height: 32px; + width: 180px; + border: 1px solid transparent; + outline: 2px solid transparent; + font-size: 14px; + font-family: 'Montserrat', sans-serif; + transition: all 0.3s ease; + color: light-dark(#222, #efe6d8); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-row input[type='text']:hover { + outline: 2px solid light-dark(#222, #efe6d8); +} +.application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-value { + height: 25px; + width: 35px; + font-size: 14px; + font-family: 'Montserrat', sans-serif; + color: light-dark(#222, #efe6d8); + align-content: center; + text-align: center; + background: url(../assets/svg/experience-shield.svg) no-repeat; +} +.theme-light .application.sheet.daggerheart.actor.dh-style.character .character-sidebar-sheet .experience-section .experience-list .experience-value { + background: url('../assets/svg/experience-shield-light.svg') no-repeat; +} +.application.sheet.daggerheart.actor.dh-style.character .window-content { + display: grid; + grid-template-columns: 275px 1fr; + grid-template-rows: 283px 1fr; + gap: 15px 0; + height: 100%; + width: 100%; +} +.application.sheet.daggerheart.actor.dh-style.character .window-content .character-sidebar-sheet { + grid-row: 1 / span 2; + grid-column: 1; +} +.application.sheet.daggerheart.actor.dh-style.character .window-content .character-header-sheet { + grid-row: 1; + grid-column: 2; +} +.application.sheet.daggerheart.actor.dh-style.character .window-content .tab { + grid-row: 2; + grid-column: 2; +} +.application.sheet.daggerheart.actor.dh-style.character .window-content .old-sheet { + width: 500px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .search-section { + display: flex; + gap: 10px; + align-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .search-section .search-bar { + position: relative; + color: light-dark(#18162e50, #efe6d850); + width: 100%; + padding-top: 5px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .search-section .search-bar input { + border-radius: 50px; + font-family: 'Montserrat', sans-serif; + background: light-dark(#18162e10, #f3c26710); + border: none; + outline: 2px solid transparent; + transition: all 0.3s ease; + padding: 0 20px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .search-section .search-bar input:hover { + outline: 2px solid light-dark(#222, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .search-section .search-bar input:placeholder { + color: light-dark(#18162e50, #efe6d850); +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .search-section .search-bar .icon { + align-content: center; + height: 32px; + position: absolute; + right: 20px; + font-size: 16px; + z-index: 1; + color: light-dark(#18162e50, #efe6d850); +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .items-section { + display: flex; + flex-direction: column; + gap: 10px; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 5%, black 95%, transparent 100%); + padding: 20px 0; + height: 80%; + scrollbar-width: thin; + scrollbar-color: light-dark(#18162e, #f3c267) transparent; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.inventory .currency-section { + display: flex; + gap: 10px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section { + display: flex; + align-items: center; + justify-content: space-between; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .search-bar { + position: relative; + color: light-dark(#18162e50, #efe6d850); + width: 80%; + padding-top: 5px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .search-bar input { + border-radius: 50px; + font-family: 'Montserrat', sans-serif; + background: light-dark(#18162e10, #f3c26710); + border: none; + outline: 2px solid transparent; + transition: all 0.3s ease; + padding: 0 20px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .search-bar input:hover { + outline: 2px solid light-dark(#222, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .search-bar input:placeholder { + color: light-dark(#18162e50, #efe6d850); +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .search-bar .icon { + align-content: center; + height: 32px; + position: absolute; + right: 20px; + font-size: 16px; + z-index: 1; + color: light-dark(#18162e50, #efe6d850); +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .btn-toogle-view { + background: light-dark(#18162e10, #18162e); + border: 1px solid light-dark(#18162e, #f3c267); + border-radius: 15px; + padding: 0; + gap: 0; + width: 62px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .btn-toogle-view span { + margin: 1px; + width: 26px; + color: light-dark(#18162e, #f3c267); +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .btn-toogle-view span.list-icon i { + margin-left: 3px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .btn-toogle-view span.grid-icon i { + margin-right: 3px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .btn-toogle-view span.list-active { + border-radius: 32px 3px 3px 32px; + background-color: light-dark(#18162e, #f3c267); + color: light-dark(#efe6d8, #18162e); + padding: 2px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .search-section .btn-toogle-view span.grid-active { + border-radius: 3px 32px 32px 3px; + background-color: light-dark(#18162e, #f3c267); + color: light-dark(#efe6d8, #18162e); + padding: 2px; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.loadout .items-section { + display: flex; + flex-direction: column; + gap: 10px; + height: 100%; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 10%, black 98%, transparent 100%); + padding: 20px 0; + height: 90%; + scrollbar-width: thin; + scrollbar-color: light-dark(#18162e, #f3c267) transparent; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.biography .items-section { + display: flex; + flex-direction: column; + gap: 10px; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 10%, black 98%, transparent 100%); + padding-bottom: 40px; + height: 100%; + scrollbar-width: thin; + scrollbar-color: light-dark(#18162e, #f3c267) transparent; +} +.application.sheet.daggerheart.actor.dh-style.character .tab.features .features-sections { + display: flex; + flex-direction: column; + gap: 10px; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 5%, black 95%, transparent 100%); + padding: 20px 0; + padding-top: 10px; + height: 95%; + scrollbar-width: thin; + scrollbar-color: light-dark(#18162e, #f3c267) transparent; +} .application.sheet.daggerheart.actor.dh-style.adversary .window-content { overflow: auto; } @@ -3521,9 +4070,6 @@ div.daggerheart.views.multiclass { justify-content: center; gap: 10px; } -.application.sheet.daggerheart.dh-style.class .tab.settings .list-items .item-line .controls a { - text-shadow: none; -} @font-face { font-family: 'Cinzel'; font-style: normal; @@ -3622,7 +4168,6 @@ div.daggerheart.views.multiclass { transition: opacity 0.3s ease; } .application.sheet.dh-style.minimized .window-content { - display: none; opacity: 0; transition: opacity 0.1s ease; } @@ -3630,26 +4175,38 @@ div.daggerheart.views.multiclass { opacity: 1; transition: opacity 0.3s ease; } -.application.sheet.dh-style .window-content { - overflow: initial; - backdrop-filter: none; - padding: 0; -} .theme-dark .application.sheet.dh-style { - backdrop-filter: blur(4px); + background: rgba(24, 22, 46, 0.33); + backdrop-filter: blur(9px); } .theme-light .application.sheet.dh-style { background-image: url('../assets/parchments/dh-parchment-light.png'); background-repeat: no-repeat; background-position: center; } +.application.sheet.daggerheart.dh-style { + border-radius: 10px; +} .application.sheet.daggerheart.dh-style .window-content { + padding: 0; position: relative; top: -36px; + min-height: -webkit-fill-available; } .application.sheet.daggerheart.dh-style .window-content .tab { padding: 0 10px; } +.application.sheet.daggerheart.character.dh-style { + border-radius: 10px; +} +.application.sheet.daggerheart.character.dh-style .window-content { + position: absolute; + top: 0; +} +.application.sheet.daggerheart.character.dh-style .window-content .tab { + padding: 0 15px; + overflow-y: hidden; +} .application.sheet.dh-style { border: 1px solid light-dark(#18162e, #f3c267); } @@ -3724,19 +4281,36 @@ div.daggerheart.views.multiclass { .application.sheet.dh-style li { margin: 0; } +.application.sheet.dh-style a:hover, +.application.sheet.dh-style a.active { + text-shadow: 0 0 8px light-dark(#18162e, #f3c267); +} .application.sheet.dh-style fieldset { align-items: center; margin-top: 5px; border-radius: 6px; border-color: light-dark(#18162e, #f3c267); } +.application.sheet.dh-style fieldset.glassy { + background-color: light-dark(#18162e10, #f3c26710); + border-color: transparent; +} +.application.sheet.dh-style fieldset.glassy legend { + padding: 2px 12px; + border-radius: 3px; + background-color: light-dark(#18162e, #f3c267); + color: light-dark(#efe6d8, #18162e); +} +.application.sheet.dh-style fieldset.flex { + display: flex; + gap: 20px; +} .application.sheet.dh-style fieldset.one-column { display: flex; flex-direction: column; align-items: start; gap: 10px; min-height: 64px; - width: 100%; } .application.sheet.dh-style fieldset.two-columns { display: grid; @@ -3754,9 +4328,6 @@ div.daggerheart.views.multiclass { font-weight: bold; color: light-dark(#18162e, #f3c267); } -.application.sheet.dh-style fieldset legend a { - text-shadow: none; -} .application.sheet.dh-style fieldset input[type='text'], .application.sheet.dh-style fieldset input[type='number'] { color: light-dark(#222, #efe6d8); @@ -3795,6 +4366,16 @@ div.daggerheart.views.multiclass { border-bottom: 1px solid light-dark(#18162e, #f3c267); mask-image: linear-gradient(270deg, transparent 0%, black 50%, transparent 100%); } +.application.sheet.dh-style side-line-div { + display: block; + height: 1px; + width: 100%; + border-bottom: 1px solid light-dark(#18162e, #f3c267); + mask-image: linear-gradient(270deg, transparent 0%, black 100%); +} +.application.sheet.dh-style side-line-div.invert { + mask-image: linear-gradient(270deg, black 0%, transparent 100%); +} .application.sheet.dh-style .item-description { opacity: 1; transform: translateY(0); @@ -3989,11 +4570,9 @@ div.daggerheart.views.multiclass { } .sheet.daggerheart.dh-style .tab-navigation .feature-tab { border: none; - gap: 5px; } .sheet.daggerheart.dh-style .tab-navigation .feature-tab a { color: light-dark(#18162e, #f3c267); - text-shadow: none; font-family: 'Montserrat', sans-serif; } .sheet.daggerheart.dh-style .tab-form-footer { @@ -4038,9 +4617,6 @@ div.daggerheart.views.multiclass { justify-content: center; gap: 10px; } -.sheet.daggerheart.dh-style .tab.actions .actions-list .action-item .controls a { - text-shadow: none; -} .sheet.daggerheart.dh-style .tab.effects .effects-list { display: flex; flex-direction: column; @@ -4073,9 +4649,6 @@ div.daggerheart.views.multiclass { justify-content: center; gap: 10px; } -.sheet.daggerheart.dh-style .tab.effects .effects-list .effect-item .controls a { - text-shadow: none; -} .application.sheet.daggerheart.dh-style .item-sheet-header { display: flex; } @@ -4248,12 +4821,129 @@ div.daggerheart.views.multiclass { .sheet.daggerheart.dh-style.item .tab.features .feature-list .feature-item .feature-line .controls a { text-shadow: none; } -#logo { - content: url(../assets/DaggerheartLogo.webp); - height: 50px; - width: 50px; +.application.sheet.daggerheart.actor.dh-style.character .inventory-item { + display: grid; + grid-template-columns: 40px 1fr 60px; + gap: 10px; + width: 100%; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-img { + height: 40px; + width: 40px; + border-radius: 3px; + border: none; + cursor: pointer; + object-fit: cover; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label { + font-family: 'Montserrat', sans-serif; + align-self: center; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label .item-name { + font-size: 14px; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label .item-tags, +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label .item-labels { + display: flex; + gap: 10px; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label .item-tags .tag, +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label .item-labels .tag { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + padding: 3px 5px; + font-size: 12px; + background: light-dark(#22222215, #efe6d815); + border: 1px solid light-dark(#222, #efe6d8); + border-radius: 3px; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label .item-tags .label, +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .item-label .item-labels .label { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + font-size: 12px; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .controls { + display: flex; + align-items: center; + justify-content: end; + gap: 8px; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .controls a { + text-align: center; +} +.application.sheet.daggerheart.actor.dh-style.character .inventory-item .controls a.unequipped { + opacity: 0.4; +} +.application.sheet.daggerheart.actor.dh-style.character .card-item { position: relative; - left: 25px; + height: 120px; + width: 100px; + border: 1px solid light-dark(#18162e, #f3c267); + border-radius: 6px; + cursor: pointer; +} +.application.sheet.daggerheart.actor.dh-style.character .card-item:hover .card-label { + padding-top: 15px; +} +.application.sheet.daggerheart.actor.dh-style.character .card-item:hover .card-label .controls { + opacity: 1; + visibility: visible; + transition: all 0.3s ease; + max-height: 16px; +} +.application.sheet.daggerheart.actor.dh-style.character .card-item .card-img { + height: 100%; + width: 100%; + object-fit: cover; +} +.application.sheet.daggerheart.actor.dh-style.character .card-item .card-label { + display: flex; + flex-direction: column; + height: fit-content; + align-items: center; + gap: 5px; + padding-top: 5px; + padding-bottom: 5px; + width: 100%; + position: absolute; + background-color: #18162e; + bottom: 0; + mask-image: linear-gradient(180deg, transparent 0%, black 20%); +} +.application.sheet.daggerheart.actor.dh-style.character .card-item .card-label .card-name { + font-family: 'Montserrat', sans-serif; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 15px; + color: #efe6d8; +} +.application.sheet.daggerheart.actor.dh-style.character .card-item .card-label .controls { + display: flex; + gap: 15px; + align-items: center; + max-height: 0px; + opacity: 0; + visibility: collapse; + transition: all 0.3s ease; + color: #efe6d8; +} +.application.sheet.daggerheart.actor.dh-style.character .items-list { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; +} +.application.sheet.daggerheart.actor.dh-style.character .card-list { + display: flex; + flex-direction: row; + gap: 10px; + align-items: center; } .daggerheart { /* Flex */ diff --git a/styles/daggerheart.less b/styles/daggerheart.less index 9094d312..3920be5b 100755 --- a/styles/daggerheart.less +++ b/styles/daggerheart.less @@ -16,7 +16,14 @@ @import './settings.less'; // new styles imports -@import './less/actors/character.less'; +@import './less/actors/character/header.less'; +@import './less/actors/character/sidebar.less'; +@import './less/actors/character/sheet.less'; +@import './less/actors/character/inventory.less'; +@import './less/actors/character/loadout.less'; +@import './less/actors/character/biography.less'; +@import './less/actors/character/features.less'; + @import './less/actors/adversary.less'; @import './less/actors/environment.less'; @@ -35,14 +42,8 @@ @import './less/global/tab-effects.less'; @import './less/global/item-header.less'; @import './less/global/feature-section.less'; - -#logo { - content: url(../assets/DaggerheartLogo.webp); - height: 50px; - width: 50px; - position: relative; - left: 25px; -} +@import './less/global/inventory-item.less'; +@import './less/global/inventory-fieldset-items.less'; .daggerheart { .vertical-separator { diff --git a/styles/less/actors/character.less b/styles/less/actors/character.less index e69de29b..e8d7d5fd 100644 --- a/styles/less/actors/character.less +++ b/styles/less/actors/character.less @@ -0,0 +1,11 @@ +@import '../utils/colors.less'; +@import '../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .window-content { + display: flex; + flex-direction: row; + height: 100%; + width: 100%; + } +} diff --git a/styles/less/actors/character/biography.less b/styles/less/actors/character/biography.less new file mode 100644 index 00000000..c4ce81ac --- /dev/null +++ b/styles/less/actors/character/biography.less @@ -0,0 +1,20 @@ +@import '../../utils/colors.less'; +@import '../../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .tab.biography { + .items-section { + display: flex; + flex-direction: column; + gap: 10px; + height: 100%; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 10%, black 98%, transparent 100%); + padding-bottom: 40px; + height: 100%; + + scrollbar-width: thin; + scrollbar-color: light-dark(@dark-blue, @golden) transparent; + } + } +} diff --git a/styles/less/actors/character/features.less b/styles/less/actors/character/features.less new file mode 100644 index 00000000..406544e6 --- /dev/null +++ b/styles/less/actors/character/features.less @@ -0,0 +1,20 @@ +@import '../../utils/colors.less'; +@import '../../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .tab.features { + .features-sections { + display: flex; + flex-direction: column; + gap: 10px; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 5%, black 95%, transparent 100%); + padding: 20px 0; + padding-top: 10px; + height: 95%; + + scrollbar-width: thin; + scrollbar-color: light-dark(@dark-blue, @golden) transparent; + } + } +} diff --git a/styles/less/actors/character/header.less b/styles/less/actors/character/header.less new file mode 100644 index 00000000..7d7403e5 --- /dev/null +++ b/styles/less/actors/character/header.less @@ -0,0 +1,157 @@ +@import '../../utils/colors.less'; +@import '../../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .character-header-sheet { + padding: 0 15px; + padding-top: 36px; + width: 100%; + + .name-row { + display: flex; + gap: 20px; + align-items: baseline; + justify-content: space-between; + padding: 0; + padding-top: 5px; + + input[type='text'] { + font-size: 32px; + height: 42px; + width: 380px; + text-align: start; + border: 1px solid transparent; + outline: 2px solid transparent; + transition: all 0.3s ease; + + &:hover { + outline: 2px solid light-dark(@dark, @golden); + } + } + + .level-div { + white-space: nowrap; + } + } + + .character-details { + display: flex; + justify-content: space-between; + padding: 5px 0; + margin-bottom: 10px; + font-size: 12px; + color: light-dark(@dark-blue, @golden); + + span { + padding: 3px; + border-radius: 3px; + transition: all 0.3s ease; + cursor: pointer; + + &:hover { + background: light-dark(@dark-blue-40, @golden-40); + } + + &.dot { + background: transparent; + cursor: default; + } + } + } + + .character-row { + display: flex; + gap: 20px; + align-items: center; + justify-content: space-between; + padding: 0; + margin-bottom: 15px; + + .hope-section, + .threshold-section { + position: relative; + display: flex; + gap: 10px; + background-color: light-dark(transparent, @dark-blue); + color: light-dark(@dark-blue, @golden); + padding: 5px 10px; + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 6px; + align-items: center; + width: fit-content; + height: 30px; + + h4 { + font-size: 14px; + font-weight: bold; + text-transform: uppercase; + color: light-dark(@dark-blue, @golden); + + &.threshold-value { + color: light-dark(@dark, @beige); + } + } + + .threshold-legend { + position: absolute; + bottom: -21px; + color: light-dark(@golden, @dark-blue); + background-color: light-dark(@dark-blue, @golden); + padding: 3px; + justify-self: anchor-center; + border-radius: 0 0 3px 3px; + text-transform: capitalize; + } + + .hope-value { + display: flex; + cursor: pointer; + } + } + } + + .character-traits { + display: flex; + justify-content: space-between; + padding: 0; + margin-bottom: 15px; + + .trait { + height: 60px; + width: 60px; + background: url(../assets/svg/trait-shield.svg) no-repeat; + + cursor: pointer; + + .theme-light & { + background: url('../assets/svg/trait-shield-light.svg') no-repeat; + } + + .trait-name { + display: flex; + align-items: center; + padding-top: 5px; + color: light-dark(@dark-blue, @golden); + font-size: 14px; + font-weight: 600; + align-items: center; + justify-content: center; + gap: 3px; + + i { + line-height: 17px; + font-size: 10px; + } + } + + .trait-value { + font-family: @font-body; + font-style: normal; + font-weight: 400; + font-size: 20px; + text-align: center; + } + } + } + } +} diff --git a/styles/less/actors/character/inventory.less b/styles/less/actors/character/inventory.less new file mode 100644 index 00000000..1b2beaf8 --- /dev/null +++ b/styles/less/actors/character/inventory.less @@ -0,0 +1,65 @@ +@import '../../utils/colors.less'; +@import '../../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .tab.inventory { + .search-section { + display: flex; + gap: 10px; + align-items: center; + + .search-bar { + position: relative; + color: light-dark(@dark-blue-50, @beige-50); + width: 100%; + padding-top: 5px; + + input { + border-radius: 50px; + font-family: @font-body; + background: light-dark(@dark-blue-10, @golden-10); + border: none; + outline: 2px solid transparent; + transition: all 0.3s ease; + padding: 0 20px; + + &:hover { + outline: 2px solid light-dark(@dark, @golden); + } + + &:placeholder { + color: light-dark(@dark-blue-50, @beige-50); + } + } + + .icon { + align-content: center; + height: 32px; + position: absolute; + right: 20px; + font-size: 16px; + z-index: 1; + color: light-dark(@dark-blue-50, @beige-50); + } + } + } + + .items-section { + display: flex; + flex-direction: column; + gap: 10px; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 5%, black 95%, transparent 100%); + padding: 20px 0; + height: 80%; + + scrollbar-width: thin; + scrollbar-color: light-dark(@dark-blue, @golden) transparent; + } + + .currency-section { + display: flex; + gap: 10px; + } + } +} diff --git a/styles/less/actors/character/loadout.less b/styles/less/actors/character/loadout.less new file mode 100644 index 00000000..0eb514e2 --- /dev/null +++ b/styles/less/actors/character/loadout.less @@ -0,0 +1,101 @@ +@import '../../utils/colors.less'; +@import '../../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .tab.loadout { + .search-section { + display: flex; + align-items: center; + justify-content: space-between; + + .search-bar { + position: relative; + color: light-dark(@dark-blue-50, @beige-50); + width: 80%; + padding-top: 5px; + + input { + border-radius: 50px; + font-family: @font-body; + background: light-dark(@dark-blue-10, @golden-10); + border: none; + outline: 2px solid transparent; + transition: all 0.3s ease; + padding: 0 20px; + + &:hover { + outline: 2px solid light-dark(@dark, @golden); + } + + &:placeholder { + color: light-dark(@dark-blue-50, @beige-50); + } + } + + .icon { + align-content: center; + height: 32px; + position: absolute; + right: 20px; + font-size: 16px; + z-index: 1; + color: light-dark(@dark-blue-50, @beige-50); + } + } + + .btn-toogle-view { + background: light-dark(@dark-blue-10, @dark-blue); + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 15px; + padding: 0; + gap: 0; + width: 62px; + + span { + margin: 1px; + width: 26px; + color: light-dark(@dark-blue, @golden); + + &.list-icon { + i { + margin-left: 3px; + } + } + &.grid-icon { + i { + margin-right: 3px; + } + } + + &.list-active { + border-radius: 32px 3px 3px 32px; + background-color: light-dark(@dark-blue, @golden); + color: light-dark(@beige, @dark-blue); + padding: 2px; + } + + &.grid-active { + border-radius: 3px 32px 32px 3px; + background-color: light-dark(@dark-blue, @golden); + color: light-dark(@beige, @dark-blue); + padding: 2px; + } + } + } + } + + .items-section { + display: flex; + flex-direction: column; + gap: 10px; + height: 100%; + overflow-y: auto; + mask-image: linear-gradient(0deg, transparent 0%, black 10%, black 98%, transparent 100%); + padding: 20px 0; + height: 90%; + + scrollbar-width: thin; + scrollbar-color: light-dark(@dark-blue, @golden) transparent; + } + } +} diff --git a/styles/less/actors/character/sheet.less b/styles/less/actors/character/sheet.less new file mode 100644 index 00000000..5317b3b5 --- /dev/null +++ b/styles/less/actors/character/sheet.less @@ -0,0 +1,32 @@ +@import '../../utils/colors.less'; +@import '../../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .window-content { + display: grid; + grid-template-columns: 275px 1fr; + grid-template-rows: 283px 1fr; + gap: 15px 0; + height: 100%; + width: 100%; + + .character-sidebar-sheet { + grid-row: 1 / span 2; + grid-column: 1; + } + + .character-header-sheet { + grid-row: 1; + grid-column: 2; + } + + .tab { + grid-row: 2; + grid-column: 2; + } + + .old-sheet { + width: 500px; + } + } +} diff --git a/styles/less/actors/character/sidebar.less b/styles/less/actors/character/sidebar.less new file mode 100644 index 00000000..b3ac42e0 --- /dev/null +++ b/styles/less/actors/character/sidebar.less @@ -0,0 +1,283 @@ +@import '../../utils/colors.less'; +@import '../../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .character-sidebar-sheet { + width: 275px; + min-width: 275px; + border-right: 1px solid light-dark(@dark-blue, @golden); + background-image: url('../assets/parchments/dh-parchment-dark.png'); + + .theme-light & { + background: transparent; + } + + img { + height: 235px; + width: 275px; + border-bottom: 1px solid light-dark(@dark-blue, @golden); + cursor: pointer; + object-fit: cover; + } + + .info-section { + position: relative; + display: flex; + flex-direction: column; + top: -20px; + gap: 30px; + margin-bottom: -10px; + + .resources-section { + display: flex; + justify-content: space-evenly; + + .status-bar { + position: relative; + width: 100px; + height: 40px; + justify-items: center; + + .status-label { + position: relative; + top: 40px; + height: 22px; + width: 79px; + clip-path: path('M0 0H79L74 16.5L39 22L4 16.5L0 0Z'); + background: light-dark(@dark-blue, @golden); + + h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + color: light-dark(@beige, @dark-blue); + } + } + .status-value { + position: absolute; + display: flex; + padding: 0 6px; + font-size: 1.5rem; + align-items: center; + width: 100px; + height: 40px; + justify-content: center; + text-align: center; + z-index: 2; + color: @beige; + + input[type='number'] { + background: transparent; + font-size: 1.5rem; + width: 40px; + height: 30px; + text-align: center; + border: none; + outline: 2px solid transparent; + color: @beige; + + &.bar-input { + padding: 0; + color: @beige; + backdrop-filter: none; + background: transparent; + transition: all 0.3s ease; + + &:hover, + &:focus { + background: @semi-transparent-dark-blue; + backdrop-filter: blur(9.5px); + } + } + } + + .bar-label { + width: 40px; + } + } + .progress-bar { + position: absolute; + appearance: none; + width: 100px; + height: 40px; + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 6px; + z-index: 1; + + &::-webkit-progress-bar { + border: none; + background: @dark-blue; + border-radius: 6px; + } + &::-webkit-progress-value { + background: @gradient-hp; + border-radius: 6px; + } + &.stress-color::-webkit-progress-value { + background: @gradient-stress; + border-radius: 6px; + } + &::-moz-progress-value, + &::-moz-progress-bar { + border-radius: 6px; + } + + &::-moz-progress-bar { + background: @gradient-hp; + } + &.stress-color::-moz-progress-bar { + background: @gradient-stress; + border-radius: 6px; + } + } + } + } + + .status-section { + display: flex; + flex-wrap: wrap; + gap: 5px; + justify-content: center; + + .status-number { + justify-items: center; + + .status-value { + position: relative; + display: flex; + width: 50px; + height: 30px; + border: 1px solid light-dark(@dark-blue, @golden); + border-bottom: none; + border-radius: 6px 6px 0 0; + padding: 0 6px; + font-size: 1.2rem; + align-items: center; + justify-content: center; + background: light-dark(transparent, @dark-blue); + z-index: 2; + + &.armor-slots { + width: 80px; + height: 30px; + } + } + + .status-label { + padding: 2px 10px; + width: 100%; + border-radius: 3px; + background: light-dark(@dark-blue, @golden); + + h4 { + font-weight: bold; + text-align: center; + line-height: 18px; + font-size: 12px; + color: light-dark(@beige, @dark-blue); + } + } + } + } + } + + .items-sidebar-list { + display: flex; + flex-direction: column; + gap: 5px; + + .inventory-item { + padding: 0 10px; + } + } + + .equipment-section { + .title { + display: flex; + gap: 15px; + align-items: center; + + h3 { + font-size: 20px; + } + } + .items-list { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + } + } + + .loadout-section { + .title { + display: flex; + gap: 15px; + align-items: center; + + h3 { + font-size: 20px; + } + } + } + + .experience-section { + .title { + display: flex; + gap: 15px; + align-items: center; + + h3 { + font-size: 20px; + } + } + + .experience-list { + display: flex; + flex-direction: column; + gap: 5px; + width: 100%; + margin-top: 10px; + align-items: center; + + .experience-row { + display: flex; + gap: 5px; + width: 250px; + align-items: center; + justify-content: space-between; + + input[type='text'] { + height: 32px; + width: 180px; + border: 1px solid transparent; + outline: 2px solid transparent; + font-size: 14px; + font-family: @font-body; + transition: all 0.3s ease; + color: light-dark(@dark, @beige); + + &:hover { + outline: 2px solid light-dark(@dark, @beige); + } + } + } + + .experience-value { + height: 25px; + width: 35px; + font-size: 14px; + font-family: @font-body; + color: light-dark(@dark, @beige); + align-content: center; + text-align: center; + background: url(../assets/svg/experience-shield.svg) no-repeat; + + .theme-light & { + background: url('../assets/svg/experience-shield-light.svg') no-repeat; + } + } + } + } + } +} diff --git a/styles/less/global/elements.less b/styles/less/global/elements.less index 139d5c53..8137e7de 100755 --- a/styles/less/global/elements.less +++ b/styles/less/global/elements.less @@ -84,19 +84,40 @@ margin: 0; } + a:hover, + a.active { + text-shadow: 0 0 8px light-dark(@dark-blue, @golden); + } + fieldset { align-items: center; margin-top: 5px; border-radius: 6px; border-color: light-dark(@dark-blue, @golden); + &.glassy { + background-color: light-dark(@dark-blue-10, @golden-10); + border-color: transparent; + + legend { + padding: 2px 12px; + border-radius: 3px; + background-color: light-dark(@dark-blue, @golden); + color: light-dark(@beige, @dark-blue); + } + } + + &.flex { + display: flex; + gap: 20px; + } + &.one-column { display: flex; flex-direction: column; align-items: start; gap: 10px; min-height: 64px; - width: 100%; } &.two-columns { @@ -117,10 +138,6 @@ font-family: @font-body; font-weight: bold; color: light-dark(@dark-blue, @golden); - - a { - text-shadow: none; - } } input[type='text'], @@ -169,6 +186,18 @@ mask-image: linear-gradient(270deg, transparent 0%, black 50%, transparent 100%); } + side-line-div { + display: block; + height: 1px; + width: 100%; + border-bottom: 1px solid light-dark(@dark-blue, @golden); + mask-image: linear-gradient(270deg, transparent 0%, black 100%); + + &.invert { + mask-image: linear-gradient(270deg, black 0%, transparent 100%); + } + } + .item-description { opacity: 1; transform: translateY(0); diff --git a/styles/less/global/inventory-fieldset-items.less b/styles/less/global/inventory-fieldset-items.less new file mode 100644 index 00000000..b09ad1b3 --- /dev/null +++ b/styles/less/global/inventory-fieldset-items.less @@ -0,0 +1,17 @@ +@import '../utils/colors.less'; +@import '../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .items-list { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + } + .card-list { + display: flex; + flex-direction: row; + gap: 10px; + align-items: center; + } +} diff --git a/styles/less/global/inventory-item.less b/styles/less/global/inventory-item.less new file mode 100644 index 00000000..a5b829ed --- /dev/null +++ b/styles/less/global/inventory-item.less @@ -0,0 +1,133 @@ +@import '../utils/colors.less'; +@import '../utils/fonts.less'; + +.application.sheet.daggerheart.actor.dh-style.character { + .inventory-item { + display: grid; + grid-template-columns: 40px 1fr 60px; + gap: 10px; + width: 100%; + + .item-img { + height: 40px; + width: 40px; + border-radius: 3px; + border: none; + cursor: pointer; + object-fit: cover; + } + + .item-label { + font-family: @font-body; + align-self: center; + + .item-name { + font-size: 14px; + } + + .item-tags, + .item-labels { + display: flex; + gap: 10px; + + .tag { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + padding: 3px 5px; + font-size: 12px; + + background: light-dark(@dark-15, @beige-15); + border: 1px solid light-dark(@dark, @beige); + border-radius: 3px; + } + + .label { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + font-size: 12px; + } + } + } + + .controls { + display: flex; + align-items: center; + justify-content: end; + gap: 8px; + + a { + text-align: center; + + &.unequipped { + opacity: 0.4; + } + } + } + } + .card-item { + position: relative; + height: 120px; + width: 100px; + border: 1px solid light-dark(@dark-blue, @golden); + border-radius: 6px; + cursor: pointer; + + &:hover { + .card-label { + padding-top: 15px; + .controls { + opacity: 1; + visibility: visible; + transition: all 0.3s ease; + max-height: 16px; + } + } + } + + .card-img { + height: 100%; + width: 100%; + object-fit: cover; + } + + .card-label { + display: flex; + flex-direction: column; + height: fit-content; + align-items: center; + gap: 5px; + padding-top: 5px; + padding-bottom: 5px; + width: 100%; + position: absolute; + background-color: @dark-blue; + bottom: 0; + mask-image: linear-gradient(180deg, transparent 0%, black 20%); + + .card-name { + font-family: @font-body; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 15px; + + color: @beige; + } + + .controls { + display: flex; + gap: 15px; + align-items: center; + max-height: 0px; + opacity: 0; + visibility: collapse; + transition: all 0.3s ease; + color: @beige; + } + } + } +} diff --git a/styles/less/global/sheet.less b/styles/less/global/sheet.less index 975841db..669b00ec 100755 --- a/styles/less/global/sheet.less +++ b/styles/less/global/sheet.less @@ -35,7 +35,6 @@ .application.sheet.dh-style.minimized { .window-content { - display: none; opacity: 0; transition: opacity 0.1s ease; } @@ -48,15 +47,10 @@ } } -.application.sheet.dh-style .window-content { - overflow: initial; - backdrop-filter: none; - padding: 0; -} - .theme-dark { .application.sheet.dh-style { - backdrop-filter: blur(4px); + background: @semi-transparent-dark-blue; + backdrop-filter: blur(9px); } } @@ -69,12 +63,29 @@ } .application.sheet.daggerheart.dh-style { + border-radius: 10px; + .window-content { + padding: 0; position: relative; top: -36px; + min-height: -webkit-fill-available; .tab { padding: 0 10px; } } } + +.application.sheet.daggerheart.character.dh-style { + border-radius: 10px; + + .window-content { + position: absolute; + top: 0; + .tab { + padding: 0 15px; + overflow-y: hidden; + } + } +} diff --git a/styles/less/global/tab-actions.less b/styles/less/global/tab-actions.less index 7279688d..7b225d4a 100644 --- a/styles/less/global/tab-actions.less +++ b/styles/less/global/tab-actions.less @@ -36,9 +36,6 @@ display: flex; justify-content: center; gap: 10px; - a { - text-shadow: none; - } } } } diff --git a/styles/less/global/tab-effects.less b/styles/less/global/tab-effects.less index c926f5d1..0c34a3ea 100644 --- a/styles/less/global/tab-effects.less +++ b/styles/less/global/tab-effects.less @@ -36,9 +36,6 @@ display: flex; justify-content: center; gap: 10px; - a { - text-shadow: none; - } } } } diff --git a/styles/less/global/tab-navigation.less b/styles/less/global/tab-navigation.less index 4e167e20..a3b48d87 100755 --- a/styles/less/global/tab-navigation.less +++ b/styles/less/global/tab-navigation.less @@ -8,11 +8,9 @@ .feature-tab { border: none; - gap: 5px; a { color: light-dark(@dark-blue, @golden); - text-shadow: none; font-family: @font-body; } } diff --git a/styles/less/items/class.less b/styles/less/items/class.less index 61974778..a70b56d4 100644 --- a/styles/less/items/class.less +++ b/styles/less/items/class.less @@ -36,9 +36,6 @@ display: flex; justify-content: center; gap: 10px; - a { - text-shadow: none; - } } } } diff --git a/styles/less/utils/colors.less b/styles/less/utils/colors.less index 7e2ed6ca..8dbb0f63 100755 --- a/styles/less/utils/colors.less +++ b/styles/less/utils/colors.less @@ -1,22 +1,21 @@ @primary-blue: #1488cc; @secondary-blue: #2b32b2; @golden: #f3c267; +@golden-40: #f3c26740; +@dark-blue-40: #18162e40; +@golden-10: #f3c26710; +@dark-blue-10: #18162e10; +@dark-blue-50: #18162e50; @dark-blue: #18162e; @deep-black: #0e0d15; @beige: #efe6d8; -@beige-60-opacity: #efe6d860; +@beige-15: #efe6d815; +@beige-50: #efe6d850; @dark-blue: rgb(24, 22, 46); @semi-transparent-dark-blue: rgba(24, 22, 46, 0.33); @dark: #222; +@dark-15: #22222215; @light-black: rgba(0, 0, 0, 0.3); @soft-shadow: rgba(0, 0, 0, 0.05); @gradient-hp: linear-gradient(15deg, rgb(70, 20, 10) 0%, rgb(190, 0, 0) 42%, rgb(252, 176, 69) 100%); @gradient-stress: linear-gradient(15deg, rgb(130, 59, 1) 0%, rgb(252, 142, 69) 65%, rgb(190, 0, 0) 100%); - -.theme-dark { - @primary-color: @golden; -} - -.theme-light { - @primary-color: @dark-blue; -} diff --git a/styles/pc.less b/styles/pc.less index 07a91411..c9abd821 100644 --- a/styles/pc.less +++ b/styles/pc.less @@ -1,3 +1,6 @@ +@import 'variables/values.less'; +@import 'variables/colors.less'; + .daggerheart.sheet.pc { width: 810px !important; // Form won't apply height for some reason @@ -457,6 +460,9 @@ align-items: flex-start; border-radius: @normalRadius; + height: 100px; + width: 100px; + .legend { margin-left: auto; margin-right: auto; diff --git a/templates/sheets/actors/character/biography.hbs b/templates/sheets/actors/character/biography.hbs new file mode 100644 index 00000000..c0bf55a9 --- /dev/null +++ b/templates/sheets/actors/character/biography.hbs @@ -0,0 +1,36 @@ +
+ +
+
+ {{localize 'DAGGERHEART.Sheets.PC.Story.characteristics'}} + +
+ {{localize 'DAGGERHEART.Sheets.PC.Pronouns'}} + {{formInput systemFields.biography.fields.characteristics.fields.pronouns value=source.system.biography.characteristics.pronouns enriched=source.system.biography.characteristics.pronouns localize=true toggled=true}} +
+ +
+ {{localize 'DAGGERHEART.Sheets.PC.age'}} + {{formInput systemFields.biography.fields.characteristics.fields.age value=source.system.biography.characteristics.age enriched=source.system.biography.characteristics.age localize=true toggled=true}} +
+ +
+ {{localize 'DAGGERHEART.Sheets.PC.faith'}} + {{formInput systemFields.biography.fields.characteristics.fields.faith value=source.system.biography.characteristics.faith enriched=source.system.biography.characteristics.faith localize=true toggled=true}} +
+ +
+
+ {{localize 'DAGGERHEART.Sheets.PC.Story.BackgroundTitle'}} + {{formInput systemFields.biography.fields.background value=source.system.biography.background enriched=source.system.biography.background localize=true toggled=true}} +
+
+ {{localize 'DAGGERHEART.Sheets.PC.Story.ConnectionsTitle'}} + {{formInput systemFields.biography.fields.connections value=source.system.biography.connections enriched=source.system.biography.connections localize=true toggled=true}} +
+
+
\ No newline at end of file diff --git a/templates/sheets/actors/character/effects.hbs b/templates/sheets/actors/character/effects.hbs new file mode 100644 index 00000000..9046fff8 --- /dev/null +++ b/templates/sheets/actors/character/effects.hbs @@ -0,0 +1,8 @@ +
+ {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'DAGGERHEART.Sheets.Global.activeEffects') type='effect'}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'DAGGERHEART.Sheets.Global.inativeEffects') type='effect'}} +
\ No newline at end of file diff --git a/templates/sheets/actors/character/features.hbs b/templates/sheets/actors/character/features.hbs new file mode 100644 index 00000000..b2851193 --- /dev/null +++ b/templates/sheets/actors/character/features.hbs @@ -0,0 +1,20 @@ +
+
+ {{#if document.system.class.value}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(concat (localize 'TYPES.Item.class') ' - ' document.system.class.value.name) type='class'}} + {{/if}} + {{#if document.system.class.subclass}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(concat (localize 'TYPES.Item.subclass') ' - ' document.system.class.subclass.name) type='subclass'}} + {{/if}} + {{#if document.system.community}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(concat (localize 'TYPES.Item.community') ' - ' document.system.community.name) type='community'}} + {{/if}} + {{#if document.system.ancestry}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(concat (localize 'TYPES.Item.ancestry') ' - ' document.system.ancestry.name) type='ancestry'}} + {{/if}} +
+
\ No newline at end of file diff --git a/templates/sheets/actors/character/header.hbs b/templates/sheets/actors/character/header.hbs new file mode 100644 index 00000000..c79ed105 --- /dev/null +++ b/templates/sheets/actors/character/header.hbs @@ -0,0 +1,111 @@ +4
+ +
+

+ +

+ +
+

+ {{localize 'DAGGERHEART.Sheets.PC.Level'}} + {{document.system.levelData.level.current}} +

+
+
+
+
+ {{#if document.system.class.value}} + {{document.system.class.value.name}} + {{else}} + {{localize 'TYPES.Item.class'}} + {{/if}} + + {{#if document.system.class.subclass}} + {{document.system.class.subclass.name}} + {{else}} + {{localize 'TYPES.Item.subclass'}} + {{/if}} + + {{#if document.system.community}} + {{document.system.community.name}} + {{else}} + {{localize 'TYPES.Item.community'}} + {{/if}} + + {{#if document.system.ancestry}} + {{document.system.ancestry.name}} + {{else}} + {{localize 'TYPES.Item.ancestry'}} + {{/if}} +
+ + {{#if document.system.multiclass.value}} +
+ {{#if document.system.multiclass.value}} + {{document.system.multiclass.value.name}} + {{else}} + {{localize 'DAGGERHEART.Sheets.PC.Heritage.Multiclass'}} + {{/if}} + + {{#if document.system.multiclass.subclass}} + {{document.system.multiclass.subclass.name}} + {{else}} + {{localize 'TYPES.Item.subclass'}} + {{/if}} +
+ {{/if}} + + +
+ +
+
+

{{localize "DAGGERHEART.General.Hope"}}

+ {{#times document.system.resources.hope.max}} + + {{#if (gte ../document.system.resources.hope.value this)}} + + {{else}} + + {{/if}} + + {{/times}} +
+
+

{{localize "DAGGERHEART.Sheets.PC.Health.Minor"}}

+

{{document.system.damageThresholds.major}}

+

{{localize "DAGGERHEART.Sheets.PC.Health.Major"}}

+

{{document.system.damageThresholds.severe}}

+

{{localize "DAGGERHEART.Sheets.PC.Health.Severe"}}

+
+
+ +
+ {{#each this.attributes as |attribute key|}} +
+
+ {{localize (concat 'DAGGERHEART.Abilities.' key '.short')}} + {{#if attribute.tierMarked}} + + {{else}} + + {{/if}} +
+
+ {{#if (gt attribute.total 0)}} + +{{attribute.total}} + {{else}} + {{attribute.total}} + {{/if}} +
+
+ {{/each}} +
+ + {{> 'systems/daggerheart/templates/sheets/global/tabs/tab-navigation.hbs'}} +
\ No newline at end of file diff --git a/templates/sheets/actors/character/inventory.hbs b/templates/sheets/actors/character/inventory.hbs new file mode 100644 index 00000000..0d9f312a --- /dev/null +++ b/templates/sheets/actors/character/inventory.hbs @@ -0,0 +1,42 @@ +
+
+ + +
+ +
+ {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'TYPES.Item.weapon') type='weapon' isGlassy=true}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'TYPES.Item.armor') type='armor' isGlassy=true}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'TYPES.Item.consumable') type='consumable' isGlassy=true}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'TYPES.Item.miscellaneous') type='miscellaneous' isGlassy=true}} +
+ +
+
+ {{localize "DAGGERHEART.Sheets.PC.Gold.Coins"}} + {{formInput systemFields.gold.fields.coins value=source.system.gold.coins enriched=source.system.gold.coins localize=true toggled=true}} +
+
+ {{localize "DAGGERHEART.Sheets.PC.Gold.Handfulls"}} + {{formInput systemFields.gold.fields.handfulls value=source.system.gold.handfulls enriched=source.system.gold.handfulls localize=true toggled=true}} +
+
+ {{localize "DAGGERHEART.Sheets.PC.Gold.Bags"}} + {{formInput systemFields.gold.fields.bags value=source.system.gold.bags enriched=source.system.gold.bags localize=true toggled=true}} +
+
+ {{localize "DAGGERHEART.Sheets.PC.Gold.Chests"}} + {{formInput systemFields.gold.fields.chests value=source.system.gold.chests enriched=source.system.gold.chests localize=true toggled=true}} +
+
+ +
\ No newline at end of file diff --git a/templates/sheets/actors/character/loadout.hbs b/templates/sheets/actors/character/loadout.hbs new file mode 100644 index 00000000..a03f393c --- /dev/null +++ b/templates/sheets/actors/character/loadout.hbs @@ -0,0 +1,28 @@ +
+
+ + + +
+ +
+ {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'DAGGERHEART.Sheets.PC.Tabs.Loadout') type='domainCard' isGlassy=true cardView='list'}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-fieldset-items.hbs' title=(localize 'DAGGERHEART.Sheets.PC.Tabs.Vault') type='domainCard' isGlassy=true cardView='list'}} +
+
\ No newline at end of file diff --git a/templates/sheets/actors/character/sidebar.hbs b/templates/sheets/actors/character/sidebar.hbs new file mode 100644 index 00000000..f6589f62 --- /dev/null +++ b/templates/sheets/actors/character/sidebar.hbs @@ -0,0 +1,120 @@ + \ No newline at end of file diff --git a/templates/sheets/character/character.hbs b/templates/sheets/character/character.hbs index 95badc15..28b80cc7 100644 --- a/templates/sheets/character/character.hbs +++ b/templates/sheets/character/character.hbs @@ -1,9 +1,8 @@ -
+
- {{document.name}} {{#if document.system.class.value}}

@@ -41,12 +40,12 @@

-
+
{{#if document.system.levelData.canLevelUp}}
*
{{/if}}
- +
{{localize "DAGGERHEART.Sheets.PC.Level"}}
@@ -81,7 +80,6 @@ {{> "systems/daggerheart/templates/sheets/parts/defense.hbs" }} {{> "systems/daggerheart/templates/sheets/parts/health.hbs" }} {{> "systems/daggerheart/templates/sheets/parts/hope.hbs" }} - {{> "systems/daggerheart/templates/sheets/parts/experience.hbs" }} {{> "systems/daggerheart/templates/sheets/parts/gold.hbs" }} {{> "systems/daggerheart/templates/sheets/parts/features.hbs" }}
diff --git a/templates/sheets/global/partials/domain-card-item.hbs b/templates/sheets/global/partials/domain-card-item.hbs new file mode 100644 index 00000000..9198c8af --- /dev/null +++ b/templates/sheets/global/partials/domain-card-item.hbs @@ -0,0 +1,32 @@ +
  • + +
    +
    + {{#if (eq type 'weapon')}} + + + + {{/if}} + {{#if (eq type 'armor')}} + + + + {{/if}} + {{#if (eq type 'domainCard')}} + {{#unless item.system.inVault}} + + + + {{else}} + + + + {{/unless}} + + {{/if}} + + +
    +
    {{item.name}}
    +
    +
  • \ No newline at end of file diff --git a/templates/sheets/global/partials/inventory-fieldset-items.hbs b/templates/sheets/global/partials/inventory-fieldset-items.hbs new file mode 100644 index 00000000..d37119d5 --- /dev/null +++ b/templates/sheets/global/partials/inventory-fieldset-items.hbs @@ -0,0 +1,49 @@ +
    + {{title}} +
      + {{#each document.items as |item|}} + {{#if (eq item.type ../type)}} + {{#unless (or (eq ../type 'ancestry') (eq item.type 'class') (eq item.type 'subclass'))}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-item.hbs' item=item type=../type}} + {{/unless}} + {{/if}} + {{/each}} + {{#each document.system.ancestry.system.actions as |action|}} + {{#if (or (eq ../type 'ancestry'))}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-item.hbs' item=action type=../type}} + {{/if}} + {{/each}} + {{#each document.system.ancestry.system.actions as |action|}} + {{#if (or (eq ../type 'ancestry'))}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-item.hbs' item=action type=../type}} + {{/if}} + {{/each}} + {{#each document.system.class.value.system.classFeatures as |classFeature|}} + {{#if (or (eq ../type 'class'))}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-item.hbs' item=classFeature type=../type}} + {{/if}} + {{/each}} + {{#each document.system.class.value.system.classFeatures as |classFeature|}} + {{#if (or (eq ../type 'class'))}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-item.hbs' item=classFeature type=../type}} + {{/if}} + {{/each}} + {{#each document.appliedEffects as |effect|}} + {{#if (or (eq ../type 'effect'))}} + {{> 'systems/daggerheart/templates/sheets/global/partials/inventory-item.hbs' item=effect type=../type}} + {{/if}} + {{/each}} + +
    +
      + {{#each document.items as |item|}} + {{#if (eq item.type ../type)}} + {{#if (eq item.type 'domainCard')}} + {{#unless (eq ../cardView 'list')}} + {{> 'systems/daggerheart/templates/sheets/global/partials/domain-card-item.hbs' item=item type=../type}} + {{/unless}} + {{/if}} + {{/if}} + {{/each}} +
    +
    \ No newline at end of file diff --git a/templates/sheets/global/partials/inventory-item.hbs b/templates/sheets/global/partials/inventory-item.hbs new file mode 100644 index 00000000..093c804f --- /dev/null +++ b/templates/sheets/global/partials/inventory-item.hbs @@ -0,0 +1,130 @@ +
  • + +
    +
    {{item.name}}
    + {{#if (eq type 'weapon')}} +
    + {{#if isSidebar}} +
    +
    + {{localize (concat 'DAGGERHEART.Abilities.' item.system.trait '.name')}} + {{localize (concat 'DAGGERHEART.Range.' item.system.range '.name')}} + - + {{item.system.damage.value}} + ({{localize (concat 'DAGGERHEART.DamageType.' item.system.damage.type '.abbreviation')}}) +
    +
    + {{else}} +
    + {{localize (concat 'DAGGERHEART.Abilities.' item.system.trait '.name')}} + {{localize (concat 'DAGGERHEART.Range.' item.system.range '.name')}} +
    +
    + {{item.system.damage.value}} + ({{localize (concat 'DAGGERHEART.DamageType.' item.system.damage.type '.abbreviation')}}) +
    +
    + {{localize (concat 'DAGGERHEART.Burden.' item.system.burden)}} +
    + {{/if}} +
    + {{/if}} + {{#if (eq type 'armor')}} + {{#if isSidebar}} +
    +
    + {{localize "DAGGERHEART.Sheets.Armor.baseScore"}}: + {{item.system.baseScore}} +
    +
    + {{else}} +
    +
    + {{localize "DAGGERHEART.Sheets.Armor.baseScore"}}: + {{item.system.baseScore}} +
    +
    + {{localize "DAGGERHEART.Sheets.Armor.baseThresholds.base"}}: + {{item.system.baseThresholds.major}} + / + {{item.system.baseThresholds.severe}} +
    +
    + {{/if}} + {{/if}} + {{#if (eq type 'domainCard')}} + {{#if isSidebar}} +
    +
    + {{localize (concat 'DAGGERHEART.Domain.CardTypes.' item.system.type)}} + - + {{localize (concat 'DAGGERHEART.Domains.' item.system.domain '.label')}} + - + {{item.system.recallCost}} + +
    +
    + {{else}} +
    +
    + {{localize (concat 'DAGGERHEART.Domain.CardTypes.' item.system.type)}} +
    +
    + {{localize (concat 'DAGGERHEART.Domains.' item.system.domain '.label')}} +
    +
    + {{localize "DAGGERHEART.Sheets.DomainCard.RecallCost"}}: + {{item.system.recallCost}} +
    +
    + {{/if}} + {{/if}} + {{#if (eq type 'effect')}} +
    +
    + {{localize (concat 'TYPES.Item.' item.parent.type)}} + : + {{item.parent.name}} +
    +
    + {{#if item.duration.duration}} + {{localize 'DAGGERHEART.Effects.duration.temporary'}} + {{else}} + {{localize 'DAGGERHEART.Effects.duration.passive'}} + {{/if}} +
    + {{#each item.statuses as |status|}} +
    + {{localize (concat 'DAGGERHEART.Condition.' status '.name')}} +
    + {{/each}} +
    + {{/if}} +
    +
    + {{#if (eq type 'weapon')}} + + + + {{/if}} + {{#if (eq type 'armor')}} + + + + {{/if}} + {{#if (eq type 'domainCard')}} + {{#unless item.system.inVault}} + + + + {{else}} + + + + {{/unless}} + + {{/if}} + + +
    +
  • \ No newline at end of file diff --git a/templates/sheets/items/domainCard/header.hbs b/templates/sheets/items/domainCard/header.hbs index 0f16e92a..a875ef56 100644 --- a/templates/sheets/items/domainCard/header.hbs +++ b/templates/sheets/items/domainCard/header.hbs @@ -14,12 +14,10 @@

    {{localize (concat 'DAGGERHEART.Domain.CardTypes.' source.system.type)}} - - {{source.system.domain}} + {{localize (concat 'DAGGERHEART.Domains.' source.system.domain '.label')}} - - - {{localize "DAGGERHEART.Sheets.DomainCard.Level"}}: - {{source.system.level}} - + {{localize "DAGGERHEART.Sheets.DomainCard.Level"}}: + {{source.system.level}}