diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..eecafbf4 Binary files /dev/null and b/.DS_Store differ diff --git a/CONTRIBUTIONS.md b/CONTRIBUTIONS.md new file mode 100644 index 00000000..1c6c32bc --- /dev/null +++ b/CONTRIBUTIONS.md @@ -0,0 +1,8 @@ +Rick Fisto +- [Fisto's Codex](https://www.gmbinder.com/share/-M-qA_FYgTwJjU8yFjjx) + +Heresy +- [Heritic's Guide to the Galaxy](https://www.gmbinder.com/share/-M815p5BfQ0wbdKY7zqN) + +Erikstormtrooper +- [Englibesh Font](http://www.erikstormtrooper.com/englibesh.htm) diff --git a/README.md b/README.md index 7edd985d..855c0e08 100644 --- a/README.md +++ b/README.md @@ -27,3 +27,10 @@ may do this by cloning the repository or downloading a zip archive from the Code and content contributions are accepted. Please feel free to submit issues to the issue tracker or submit merge requests for code changes. Approval for such requests involves code and (if necessary) design review by The Dev Team. Please reach out on the SW5E Foundry Dev Discord with any questions. + +## Compatible Modules and Optimum Settings + +- DAE (Dynamic Active Effects) is needed for many automatic features. + -**Please enable: "Include active effects in special traits display" in "Configure Game Settings> Module Settings> Dynamic Active Effects".** +- Midi QoL is compatible with great features +- Token Action Hud has compatibility diff --git a/less/original/chat.less b/less/original/chat.less index 7bf83c2a..6aca1df4 100644 --- a/less/original/chat.less +++ b/less/original/chat.less @@ -23,7 +23,7 @@ flex: 1; margin: 0; line-height: 36px; - .bungeeInline(); + .engli-Besh(); color: @colorOlive; &:hover { color: #111; diff --git a/less/update/_variables-dark.less b/less/update/_variables-dark.less index 97cbfd1c..7a96aea3 100644 --- a/less/update/_variables-dark.less +++ b/less/update/_variables-dark.less @@ -1,146 +1,146 @@ -//override Primary Red -@colorRed: #E81111; -@colorDarkBg: #2b2b2b; -//Background -@primaryBackground: linear-gradient(90deg,#626262 0,#4d4d4d 30%,#4d4d4d 70%,#626262); - -//Typography -@headingColor: @colorRed; -@headerBorderColor: @colorBlue; -@bodyFontColor: white; -@linkColor: @colorRed; -@linkSecondaryColor: @colorPaleGray; - -@blockquoteBackground: @colorPaleRed; -@blockquoteBorder: @colorRed; -@blockquoteShadow: 0 0 20px rgba(@colorRed, 0.8); - -//forms -@inputBackgroundColor: @colorDarkGray; -@inputBorderNormal: @colorLightGray; -@inputBorderHover: @colorGray; -@inputBorderFocus: @colorRed; -@inputTextColor: white; - -@buttonBackground: @colorRed; -@buttonTextColor: white; -@buttonHoverBackground: lighten(@colorRed, 5); -@buttonSecondaryBackground: @colorLightGray; -@buttonSecondaryTextColor: white; -@buttonSecondaryHoverBackground: lighten(@colorLightGray, 5); - -//other bits -@hrColor: @colorBlue; -@tableTextColor: white; -@tableHeaderTextColor: @colorPaleGray; -@tableBackground: @colorGray; -@tableRowHoverBackground: lighten(@colorLightGray, 10); -@tableRowBorderColor: @colorLightGray; - -//universalColors -@windowHeaderBackground: @colorDarkBg; -@windowHeaderLinkColor: @colorRed; - -//Sidebar -@sidebarTabBackground: @windowHeaderBackground; -@sidebarTabLinkColor: @windowHeaderLinkColor; -@sidebarTabLinkUnderline: @colorRed; - -@chatBackground: @colorDarkGray; -@chatHeaderColor: @colorRed; -@chatHeaderBottomBorderColor: @colorBlue; -@chatNotificationColor: @colorBlue; -@cardButtonBorder: @colorLightGray; -@cardFooterBorder: @colorLightBlue; -@cardFooterSeparator: @colorPaleGray; - -@diceFormulaBackground: @colorGray; -@diceFormualColor: white; -@diceTotalBackground: @colorPaleRed; -@diceTotalBorder: @colorRed; -@diceTotalShadow: @colorRed; -@diceSuccessColor: @colorGreen; -@diceFailureColor: @colorRed; -@diceCriticalBackground: @colorPaleGreen; -@diceCriticalColor: @colorGreen; -@diceFumbleBackground: @colorPaleRed; -@diceFumbleColor: @colorRed; - -@altRowBackground: @colorGray; - -@combatRoundColor: @colorRed; -@combatRoundBorder: @colorBlue; -@combatCombatantControlColor: @colorPaleGray; -@combatCombatantControlColorActive: @colorRed; -@combatActiveCombatantColor: @colorBlue; -@combatTokenResourceColor: white; -@combatTokenResouceBorder: @colorLightGray; -@combatControlsBorder: @colorBlue; - -@folderSearchIconColor: @colorBlue; -@folderSubdirectoryBackground: @colorDarkBg; -@folderSubdirectoryBorder: @colorLightGray; -@directoryListItemBorder: @colorBlue; -@folderHeaderBackground: @colorDarkBg; -@folderHeaderColor: white; -@folderIconColor: @colorBlue; - -@entityBackgroundColor: @colorDarkBg; -@entityNameColor: @colorBlack; - -@sceneBorderColor: @colorBlue; -@sceneBackgroundColor: @colorDarkBg; - -@playlistBackgroundColor: @colorDarkBg; -@playlistHeaderBorder: @colorBlue; -@playlistSoundColor: @colorBlack; - -@compendiumEntityBackground: @colorDarkBg; -@compendiumStatusIcon: @colorLightGray; - -@foundryNavBgColor: rgba(@colorLightBlue, 0.4); -@foundryNavTextColor: white; -@foundryNavBorderColor: @colorBlue; -@foundryNavBgColorGM: @colorBlue; -@foundryNavBorderColorGM: @colorPaleBlue; -@foundryNavSceneLinkColor: white; -@foundryNavActiveBgColor: rgba(@colorRed, 0.6); -@foundryNavActiveBorderColor: lighten(@colorRed, 20); -@foundryNavActiveGlow: darken(@colorRed, 20); -@foundryNavContextShadow: darken(@colorBlue, 20); -@foundryNavContextBorderColor: @colorBlue; - -@foundryPlayersArrowColor: @colorLightGray; - -@actorPanelBgColor: white; -@actorNameColor: @colorRed; -@actorXPBarBorder: @colorGray; -@actorXPBarBackground: @colorPaleBlue; -@actorXPBarColor: @colorBlue; -@actorProficiencyTextColor: @colorGray; -@actorAttributeInputColor: @colorGray; -@actorSeparatorColor: @colorLightGray; -@actorAttributeButtonBorder: @colorPaleGray; -@actorAttributeButtonBorderHover: @colorRed; -@actorNavigationTabsColor: @colorGray; -@actorNavigationTabsActiveColor: @colorRed; -@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1); -@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1); -@actorFilterBorderColor: @colorLightGray; -@actorFilterHoverColor: @colorRed; -@actorFilterActiveColor: @colorRed; -@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10); -@actorGroupListTitleBorderColor: @colorBlue; -@actorGroupListColumnBorderColor: @colorPaleGray; -@actorGroupListAltRowColor: lighten(@colorPaleGray, 10); -@actorItemRollableD20Color: @colorGray; -@actorItemRollableD20HoverColor: @colorRed; -@actorItemControlToggleColor: @colorLightGray; -@actorAbilityScoreColor: @colorGray; -@actorAbilityBorderColor: @colorPaleGray; -@actorSkillsAltRowColor: lighten(@colorPaleGray, 10); -@actorEncumbranceLabelBackground: @colorPaleGray; -@actorEncumbranceTextColor: @colorBlack; -@actorEncumbranceBorderColor: @colorBlack; -@actorEncumbranceBarBgColor: @colorPaleBlue; +//override Primary Red +@colorRed: #E81111; +@colorDarkBg: #2b2b2b; +//Background +@primaryBackground: linear-gradient(90deg,#626262 0,#4d4d4d 30%,#4d4d4d 70%,#626262); + +//Typography +@headingColor: @colorRed; +@headerBorderColor: @colorBlue; +@bodyFontColor: white; +@linkColor: @colorRed; +@linkSecondaryColor: @colorPaleGray; + +@blockquoteBackground: @colorPaleRed; +@blockquoteBorder: @colorRed; +@blockquoteShadow: 0 0 20px rgba(@colorRed, 0.8); + +//forms +@inputBackgroundColor: @colorDarkGray; +@inputBorderNormal: @colorLightGray; +@inputBorderHover: @colorGray; +@inputBorderFocus: @colorRed; +@inputTextColor: white; + +@buttonBackground: @colorRed; +@buttonTextColor: white; +@buttonHoverBackground: lighten(@colorRed, 5); +@buttonSecondaryBackground: @colorLightGray; +@buttonSecondaryTextColor: white; +@buttonSecondaryHoverBackground: lighten(@colorLightGray, 5); + +//other bits +@hrColor: @colorBlue; +@tableTextColor: white; +@tableHeaderTextColor: @colorPaleGray; +@tableBackground: @colorGray; +@tableRowHoverBackground: lighten(@colorLightGray, 10); +@tableRowBorderColor: @colorLightGray; + +//universalColors +@windowHeaderBackground: @colorDarkBg; +@windowHeaderLinkColor: @colorRed; + +//Sidebar +@sidebarTabBackground: @windowHeaderBackground; +@sidebarTabLinkColor: @windowHeaderLinkColor; +@sidebarTabLinkUnderline: @colorRed; + +@chatBackground: @colorDarkGray; +@chatHeaderColor: @colorRed; +@chatHeaderBottomBorderColor: @colorBlue; +@chatNotificationColor: @colorBlue; +@cardButtonBorder: @colorLightGray; +@cardFooterBorder: @colorLightBlue; +@cardFooterSeparator: @colorPaleGray; + +@diceFormulaBackground: @colorGray; +@diceFormualColor: white; +@diceTotalBackground: @colorPaleRed; +@diceTotalBorder: @colorRed; +@diceTotalShadow: @colorRed; +@diceSuccessColor: @colorGreen; +@diceFailureColor: @colorRed; +@diceCriticalBackground: @colorPaleGreen; +@diceCriticalColor: @colorGreen; +@diceFumbleBackground: @colorPaleRed; +@diceFumbleColor: @colorRed; + +@altRowBackground: @colorGray; + +@combatRoundColor: @colorRed; +@combatRoundBorder: @colorBlue; +@combatCombatantControlColor: @colorPaleGray; +@combatCombatantControlColorActive: @colorRed; +@combatActiveCombatantColor: @colorBlue; +@combatTokenResourceColor: white; +@combatTokenResouceBorder: @colorLightGray; +@combatControlsBorder: @colorBlue; + +@folderSearchIconColor: @colorBlue; +@folderSubdirectoryBackground: @colorDarkBg; +@folderSubdirectoryBorder: @colorLightGray; +@directoryListItemBorder: @colorBlue; +@folderHeaderBackground: @colorDarkBg; +@folderHeaderColor: white; +@folderIconColor: @colorBlue; + +@entityBackgroundColor: @colorDarkBg; +@entityNameColor: @colorBlack; + +@sceneBorderColor: @colorBlue; +@sceneBackgroundColor: @colorDarkBg; + +@playlistBackgroundColor: @colorDarkBg; +@playlistHeaderBorder: @colorBlue; +@playlistSoundColor: @colorBlack; + +@compendiumEntityBackground: @colorDarkBg; +@compendiumStatusIcon: @colorLightGray; + +@foundryNavBgColor: rgba(@colorLightBlue, 0.4); +@foundryNavTextColor: white; +@foundryNavBorderColor: @colorBlue; +@foundryNavBgColorGM: @colorBlue; +@foundryNavBorderColorGM: @colorPaleBlue; +@foundryNavSceneLinkColor: white; +@foundryNavActiveBgColor: rgba(@colorRed, 0.6); +@foundryNavActiveBorderColor: lighten(@colorRed, 20); +@foundryNavActiveGlow: darken(@colorRed, 20); +@foundryNavContextShadow: darken(@colorBlue, 20); +@foundryNavContextBorderColor: @colorBlue; + +@foundryPlayersArrowColor: @colorLightGray; + +@actorPanelBgColor: white; +@actorNameColor: @colorRed; +@actorXPBarBorder: @colorGray; +@actorXPBarBackground: @colorPaleBlue; +@actorXPBarColor: @colorBlue; +@actorProficiencyTextColor: @colorGray; +@actorAttributeInputColor: @colorGray; +@actorSeparatorColor: @colorLightGray; +@actorAttributeButtonBorder: @colorPaleGray; +@actorAttributeButtonBorderHover: @colorRed; +@actorNavigationTabsColor: @colorGray; +@actorNavigationTabsActiveColor: @colorRed; +@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1); +@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1); +@actorFilterBorderColor: @colorLightGray; +@actorFilterHoverColor: @colorRed; +@actorFilterActiveColor: @colorRed; +@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10); +@actorGroupListTitleBorderColor: @colorBlue; +@actorGroupListColumnBorderColor: @colorPaleGray; +@actorGroupListAltRowColor: lighten(@colorPaleGray, 10); +@actorItemRollableD20Color: @colorGray; +@actorItemRollableD20HoverColor: @colorRed; +@actorItemControlToggleColor: @colorLightGray; +@actorAbilityScoreColor: @colorGray; +@actorAbilityBorderColor: @colorPaleGray; +@actorSkillsAltRowColor: lighten(@colorPaleGray, 10); +@actorEncumbranceLabelBackground: @colorPaleGray; +@actorEncumbranceTextColor: @colorBlack; +@actorEncumbranceBorderColor: @colorBlack; +@actorEncumbranceBarBgColor: @colorPaleBlue; @actorEncumbranceBarColor: @colorBlue; \ No newline at end of file diff --git a/less/update/_variables-light.less b/less/update/_variables-light.less index 12f86a38..b52a863b 100644 --- a/less/update/_variables-light.less +++ b/less/update/_variables-light.less @@ -1,143 +1,143 @@ -//Background -@primaryBackground: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6);// linear-gradient(90deg, @colorPaleBlue 0%, @colorPaleGray 30%, @colorPaleGray 70%, @colorPaleBlue); - -//Typography -@headingColor: @colorRed; -@headerBorderColor: @colorBlue; -@bodyFontColor: @colorBlack; -@linkColor: @colorRed; -@linkSecondaryColor: @colorGray; - -@blockquoteBackground: @colorPaleBlue; -@blockquoteBorder: @colorBlue; -@blockquoteShadow: 0 0 20px rgba(@colorBlue, 0.8); - -//forms -@inputBackgroundColor: @colorGray; -@inputBorderNormal: @colorLightGray; -@inputBorderHover: @colorGray; -@inputBorderFocus: @colorRed; -@inputTextColor: @colorBlack; - -@buttonBackground: @colorRed; -@buttonTextColor: white; -@buttonHoverBackground: lighten(@colorRed, 5); -@buttonSecondaryBackground: @colorPaleGray; -@buttonSecondaryTextColor: @colorBlack; -@buttonSecondaryHoverBackground: lighten(@colorPaleGray, 5); - -//other bits -@hrColor: @colorBlue; -@tableTextColor: @colorBlack; -@tableHeaderTextColor: @colorLightGray; -@tableBackground: white; -@tableRowHoverBackground: lighten(@colorPaleGray, 10); -@tableRowBorderColor: @colorPaleGray; - -//universalColors -@windowHeaderBackground: white; -@windowHeaderLinkColor: @colorRed; - -//Sidebar -@sidebarTabBackground: @windowHeaderBackground; -@sidebarTabLinkColor: @windowHeaderLinkColor; -@sidebarTabLinkUnderline: @colorRed; - -@chatBackground: white; -@chatHeaderColor: @colorRed; -@chatHeaderBottomBorderColor: @colorBlue; -@chatNotificationColor: @colorBlue; -@cardButtonBorder: @colorLightGray; -@cardFooterBorder: @colorLightBlue; -@cardFooterSeparator: @colorPaleGray; - -@diceFormulaBackground: @colorPaleGray; -@diceFormualColor: @colorBlack; -@diceTotalBackground: @colorPaleBlue; -@diceTotalBorder: @colorBlue; -@diceTotalShadow: @colorBlue; -@diceSuccessColor: @colorGreen; -@diceFailureColor: @colorRed; -@diceCriticalBackground: @colorPaleGreen; -@diceCriticalColor: @colorGreen; -@diceFumbleBackground: @colorPaleRed; -@diceFumbleColor: @colorRed; - -@altRowBackground: @colorPaleBlue; - -@combatRoundColor: @colorRed; -@combatRoundBorder: @colorBlue; -@combatCombatantControlColor: @colorLightGray; -@combatCombatantControlColorActive: @colorDarkGray; -@combatActiveCombatantColor: @colorBlue; -@combatTokenResourceColor: @colorGray; -@combatTokenResouceBorder: @colorLightGray; -@combatControlsBorder: @colorBlue; - -@folderSearchIconColor: @colorBlue; -@folderSubdirectoryBackground: white; -@folderSubdirectoryBorder: @colorBlack; -@directoryListItemBorder: @colorBlue; -@folderHeaderBackground: white; -@folderHeaderColor: @colorBlack; -@folderIconColor: @colorBlue; - -@entityBackgroundColor: white; -@entityNameColor: @colorBlack; - -@sceneBorderColor: @colorBlue; -@sceneBackgroundColor: white; - -@playlistBackgroundColor: white; -@playlistHeaderBorder: @colorBlue; -@playlistSoundColor: @colorBlack; - -@compendiumEntityBackground: white; -@compendiumStatusIcon: @colorLightGray; - -@foundryNavBgColor: rgba(@colorLightBlue, 0.4); -@foundryNavTextColor: white; -@foundryNavBorderColor: @colorBlue; -@foundryNavBgColorGM: @colorBlue; -@foundryNavBorderColorGM: @colorPaleBlue; -@foundryNavSceneLinkColor: white; -@foundryNavActiveBgColor: rgba(@colorRed, 0.6); -@foundryNavActiveBorderColor: lighten(@colorRed, 20); -@foundryNavActiveGlow: darken(@colorRed, 20); -@foundryNavContextShadow: darken(@colorBlue, 20); -@foundryNavContextBorderColor: @colorBlue; - -@foundryPlayersArrowColor: @colorLightGray; - -@actorPanelBgColor: white; -@actorNameColor: @colorRed; -@actorXPBarBorder: @colorGray; -@actorXPBarBackground: @colorPaleBlue; -@actorXPBarColor: @colorBlue; -@actorProficiencyTextColor: @colorGray; -@actorAttributeInputColor: @colorGray; -@actorSeparatorColor: @colorLightGray; -@actorAttributeButtonBorder: @colorPaleGray; -@actorAttributeButtonBorderHover: @colorRed; -@actorNavigationTabsColor: @colorGray; -@actorNavigationTabsActiveColor: @colorRed; -@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1); -@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1); -@actorFilterBorderColor: @colorLightGray; -@actorFilterHoverColor: @colorRed; -@actorFilterActiveColor: @colorRed; -@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10); -@actorGroupListTitleBorderColor: @colorBlue; -@actorGroupListColumnBorderColor: @colorPaleGray; -@actorGroupListAltRowColor: lighten(@colorPaleGray, 10); -@actorItemRollableD20Color: @colorGray; -@actorItemRollableD20HoverColor: @colorRed; -@actorItemControlToggleColor: @colorLightGray; -@actorAbilityScoreColor: @colorGray; -@actorAbilityBorderColor: @colorPaleGray; -@actorSkillsAltRowColor: lighten(@colorPaleGray, 10); -@actorEncumbranceLabelBackground: @colorPaleGray; -@actorEncumbranceTextColor: @colorBlack; -@actorEncumbranceBorderColor: @colorBlack; -@actorEncumbranceBarBgColor: @colorPaleBlue; +//Background +@primaryBackground: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6);// linear-gradient(90deg, @colorPaleBlue 0%, @colorPaleGray 30%, @colorPaleGray 70%, @colorPaleBlue); + +//Typography +@headingColor: @colorRed; +@headerBorderColor: @colorBlue; +@bodyFontColor: @colorBlack; +@linkColor: @colorRed; +@linkSecondaryColor: @colorGray; + +@blockquoteBackground: @colorPaleBlue; +@blockquoteBorder: @colorBlue; +@blockquoteShadow: 0 0 20px rgba(@colorBlue, 0.8); + +//forms +@inputBackgroundColor: @colorGray; +@inputBorderNormal: @colorLightGray; +@inputBorderHover: @colorGray; +@inputBorderFocus: @colorRed; +@inputTextColor: @colorBlack; + +@buttonBackground: @colorRed; +@buttonTextColor: white; +@buttonHoverBackground: lighten(@colorRed, 5); +@buttonSecondaryBackground: @colorPaleGray; +@buttonSecondaryTextColor: @colorBlack; +@buttonSecondaryHoverBackground: lighten(@colorPaleGray, 5); + +//other bits +@hrColor: @colorBlue; +@tableTextColor: @colorBlack; +@tableHeaderTextColor: @colorLightGray; +@tableBackground: white; +@tableRowHoverBackground: lighten(@colorPaleGray, 10); +@tableRowBorderColor: @colorPaleGray; + +//universalColors +@windowHeaderBackground: white; +@windowHeaderLinkColor: @colorRed; + +//Sidebar +@sidebarTabBackground: @windowHeaderBackground; +@sidebarTabLinkColor: @windowHeaderLinkColor; +@sidebarTabLinkUnderline: @colorRed; + +@chatBackground: white; +@chatHeaderColor: @colorRed; +@chatHeaderBottomBorderColor: @colorBlue; +@chatNotificationColor: @colorBlue; +@cardButtonBorder: @colorLightGray; +@cardFooterBorder: @colorLightBlue; +@cardFooterSeparator: @colorPaleGray; + +@diceFormulaBackground: @colorPaleGray; +@diceFormualColor: @colorBlack; +@diceTotalBackground: @colorPaleBlue; +@diceTotalBorder: @colorBlue; +@diceTotalShadow: @colorBlue; +@diceSuccessColor: @colorGreen; +@diceFailureColor: @colorRed; +@diceCriticalBackground: @colorPaleGreen; +@diceCriticalColor: @colorGreen; +@diceFumbleBackground: @colorPaleRed; +@diceFumbleColor: @colorRed; + +@altRowBackground: @colorPaleBlue; + +@combatRoundColor: @colorRed; +@combatRoundBorder: @colorBlue; +@combatCombatantControlColor: @colorLightGray; +@combatCombatantControlColorActive: @colorDarkGray; +@combatActiveCombatantColor: @colorBlue; +@combatTokenResourceColor: @colorGray; +@combatTokenResouceBorder: @colorLightGray; +@combatControlsBorder: @colorBlue; + +@folderSearchIconColor: @colorBlue; +@folderSubdirectoryBackground: white; +@folderSubdirectoryBorder: @colorBlack; +@directoryListItemBorder: @colorBlue; +@folderHeaderBackground: white; +@folderHeaderColor: @colorBlack; +@folderIconColor: @colorBlue; + +@entityBackgroundColor: white; +@entityNameColor: @colorBlack; + +@sceneBorderColor: @colorBlue; +@sceneBackgroundColor: white; + +@playlistBackgroundColor: white; +@playlistHeaderBorder: @colorBlue; +@playlistSoundColor: @colorBlack; + +@compendiumEntityBackground: white; +@compendiumStatusIcon: @colorLightGray; + +@foundryNavBgColor: rgba(@colorLightBlue, 0.4); +@foundryNavTextColor: white; +@foundryNavBorderColor: @colorBlue; +@foundryNavBgColorGM: @colorBlue; +@foundryNavBorderColorGM: @colorPaleBlue; +@foundryNavSceneLinkColor: white; +@foundryNavActiveBgColor: rgba(@colorRed, 0.6); +@foundryNavActiveBorderColor: lighten(@colorRed, 20); +@foundryNavActiveGlow: darken(@colorRed, 20); +@foundryNavContextShadow: darken(@colorBlue, 20); +@foundryNavContextBorderColor: @colorBlue; + +@foundryPlayersArrowColor: @colorLightGray; + +@actorPanelBgColor: white; +@actorNameColor: @colorRed; +@actorXPBarBorder: @colorGray; +@actorXPBarBackground: @colorPaleBlue; +@actorXPBarColor: @colorBlue; +@actorProficiencyTextColor: @colorGray; +@actorAttributeInputColor: @colorGray; +@actorSeparatorColor: @colorLightGray; +@actorAttributeButtonBorder: @colorPaleGray; +@actorAttributeButtonBorderHover: @colorRed; +@actorNavigationTabsColor: @colorGray; +@actorNavigationTabsActiveColor: @colorRed; +@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1); +@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1); +@actorFilterBorderColor: @colorLightGray; +@actorFilterHoverColor: @colorRed; +@actorFilterActiveColor: @colorRed; +@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10); +@actorGroupListTitleBorderColor: @colorBlue; +@actorGroupListColumnBorderColor: @colorPaleGray; +@actorGroupListAltRowColor: lighten(@colorPaleGray, 10); +@actorItemRollableD20Color: @colorGray; +@actorItemRollableD20HoverColor: @colorRed; +@actorItemControlToggleColor: @colorLightGray; +@actorAbilityScoreColor: @colorGray; +@actorAbilityBorderColor: @colorPaleGray; +@actorSkillsAltRowColor: lighten(@colorPaleGray, 10); +@actorEncumbranceLabelBackground: @colorPaleGray; +@actorEncumbranceTextColor: @colorBlack; +@actorEncumbranceBorderColor: @colorBlack; +@actorEncumbranceBarBgColor: @colorPaleBlue; @actorEncumbranceBarColor: @colorBlue; \ No newline at end of file diff --git a/less/update/components/actor-global.less b/less/update/components/actor-global.less index 62cdfe71..c958e26f 100644 --- a/less/update/components/actor-global.less +++ b/less/update/components/actor-global.less @@ -1,1059 +1,1059 @@ - -.panel { - padding: 8px; - border-radius: 4px; - .dropShadow1(); -} -.sw5e.sheet.actor.character { - min-width: 850px; - min-height: 720px; -} -.sw5e.sheet .window-content { - .openSans(12px); - - input, - select { - height: 24px; - line-height: 20px; - padding: 1px 4px; - &:hover { - box-shadow: none; - } - &:focus { - box-shadow: none; - } - } - - button { - cursor: pointer; - &:hover, - &:focus { - box-shadow: none; - } - } -} - -.sw5e.sheet.actor { - input, select, textarea { - border-color: transparent; - background: none; - - } - .swalt-sheet { - display: grid; - grid-template-rows: 182px 36px auto; - - section>h1 { - .russoOne(17px); - text-align: left; - margin-bottom: 4px; - } - - header { - display: grid; - grid-template-rows: 1fr 26px auto; - grid-template-columns: 128px 1fr; - column-gap: 8px; - grid-row-gap: 8px; - - img { - grid-column-start: 1; - grid-row-start: 1; - grid-row-end: 4; - box-sizing: border-box; - border: none; - border-radius: 0; - max-width: 100%; - max-height: 100%; - } - - h1.character-name { - grid-row: 1; - grid-column: 2; - margin: 0; - border: none; - align-self: center; - height: auto; - - .russoOne(32px); - text-transform: uppercase; - height: auto; - - input[type="text"] { - .russoOne(32px); - text-transform: uppercase; - height: auto; - border: none; - background: none; - &:focus { - text-transform: none; - } - } - } - - .level-experience { - grid-row: 1; - grid-column: 3; - - .charlevel { - .russoOne(17px); - text-align: right; - input { - display: inline-block; - width: 42px; - height: auto; - } - } - - .experience { - .russoOne(17px); - text-align: right; - line-height: 26px; - input { - display: inline-block; - width: 120px; - text-align: right; - } - } - - .xpbar { - height: 8px; - - .bar { - display: block; - height: 100%; - } - } - } - - .summary { - grid-column-start: 2; - grid-row-start: 2; - grid-column-end: 4; - display: grid; - grid-template-rows: 1fr; - grid-template-columns: repeat(4, 1fr); - - input, - .proficiency { - display: inline; - height: auto; - .russoOne(17px); - line-height: 24px; - } - - .proficiency { - line-height: 26px; - } - } - - .attributes { - grid-column-start: 2; - grid-row-start: 3; - grid-column-end: 4; - display: grid; - grid-template-columns: repeat(5, 1fr); - column-gap: 12px; - - h1 { - text-align: center; - } - - .attribute-value, - .attribute-value input { - .russoOne(22px); - text-align: center; - line-height: 1; - - } - - .attribute-value { - - &.multiple { - display: grid; - grid-template-columns: auto 14px auto; - - input { - width: 100%; - } - } - - input { - display: inline-block; - } - - .value-number { - display: inline-block; - text-align: right; - - padding: 0px 3px; - - &:last-child { - text-align: left; - } - } - - span.value-number { - padding: 1px 4px; - } - - .initiative { - padding: 1px 4px; - display: block; - } - } - - footer { - - - button { - background: none; - padding: 1px 3px; - font-size: inherit; - line-height: inherit; - display: inline-block; - width: auto; - - &:hover { - font-weight: 400; - } - } - - &.hit-points, - &.hit-dice, - &.initiative { - display: grid; - grid-template-columns: 1fr 1fr; - column-gap: 8px; - margin-top: 0; - input, - button { - //border: 1px solid @colorPaleGray; - width: 100%; - text-align: center; - } - - button { - - font-weight: 400; - margin-top: 2px; - - } - - span { - display: block; - padding: 3px 4px; - } - } - - &.speed { - margin-top: 0; - input { - text-align: center; - } - } - } - } - } - - nav.sheet-navigation { - display: grid; - grid-template-columns: repeat(6, 1fr); - column-gap: 16px; - margin: 4px 0; - - .item { - background: none; - border: none; - border-bottom: 3px solid transparent; - border-radius: 0; - margin: 0; - padding: 3px 0 0; - line-height: 1; - .russoOne(16px); - } - } - .editor { - position: static; - min-height: 32px; - padding: 0; - .editor-edit { - display: block; - font-size: 12px; - background: none; - border: none; - padding: 0; - box-shadow: none; - top: 0; - right: 0; - &:hover { - text-shadow: none; - } - } - .tox.tox-tinymce { - height: 250px !important; - } - } - .tab { - display: none; - - &.active { - display: block; - } - - .filter-list { - list-style: none; - margin: 0; - padding: 0 0 8px; - display: flex; - flex-direction: row; - justify-content: flex-end; - max-width: 100%; - - .filter-title { - display: none; - font-weight: bold; - width: 50px; - } - - .filter-item { - width: 100px; - text-align: center; - - &+.filter-item { - margin-left: 12px; - } - - &:hover { - text-shadow: none; - } - - } - } - - .group-list-header { - display: grid; - padding-right: 6px; - } - - .group-list-title { - h3 { - .russoOne(17px); - margin: 4px 0 0; - padding: 0 4px; - display: inline; - border: none; - } - - .item-create { - font-size: 12px; - i { - font-size: 10px; - } - &:hover { - text-shadow: none; - } - } - - } - - .group-list-header, - .group-list { - .item-detail { - text-align: left; - padding: 4px; - } - } - - .group-list { - height: 100%; - overflow-y: scroll; - & > li:first-child { - padding-top: 8px; - } - } - - .group-list, - .group-list ol { - list-style: none; - margin: 0 0 8px; - padding: 0; - - .item-uses { - input { - display: inline-block; - width: 32px; - margin-right: 0; - text-align: right; - } - span { - padding-left: 8px; - } - .slot-max-override { - margin-left: 5px; - &:hover { - text-shadow: none; - } - } - } - li.item { - display: grid; - - h4 { - .openSans(13px, 700); - letter-spacing: 0; - } - .item-name, - .item-detail { - padding: 4px; - line-height: 30px; - } - - .item-name { - display: flex; - - .item-image { - width: 30px; - height: 30px; - position: relative; - background-size: contain; - &::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: '\f6cf'; - opacity: 0; - position: absolute; - top: 0; - left: 2px; - font-size: 26px; - } - - } - - h4 { - line-height: 30px; - display: inline-block; - height: 30px; - padding-left: 8px; - margin: 0; - } - - &.rollable:hover { - text-shadow: none; - - .item-image { - background-image: none !important; - - &::before { - opacity: 1; - } - - &:hover { - background-image: none !important; - - &::before { - opacity: 1; - } - } - } - } - } - - .item-summary { - grid-column-start: 1; - grid-column-end: -1; - padding: 4px 4px 4px 38px; - } - - .item-controls { - display: flex; - flex-direction: row; - justify-content: space-evenly; - } - - .item-control { - &:hover { - text-shadow: none; - } - - } - - } - } - - .group-grid-inventory { - grid-template-columns: auto 60px 100px 100px 100px; - - &.group-list-title { - .item-controls { - grid-column-start: 5; - } - } - } - .group-grid-features { - grid-template-columns: auto 100px 100px 100px; - &.group-list-title { - display: grid; - } - .item-controls { - grid-column-start: 4; - } - - } - .group-grid-powers { - grid-template-columns: auto repeat(5, 100px); - &.group-list-title { - display: grid; - align-items: end; - .item-detail { - padding: 0 4px; - } - } - - - } - .group-grid-fav-items { - grid-template-columns: auto 60px 30px 30px 50px; - &.group-list-title { - display: grid; - align-items: end; - .item-detail { - padding: 0 4px; - } - } - } - - } - - .tab > .panel { - height: 100%; - overflow: hidden; - display: grid; - } - - .tab.attributes { - &.active { - display: grid; - } - - grid-template-columns: 350px auto; - grid-template-rows: auto; - column-gap: 16px; - - .abilities { - display: grid; - grid-template-columns: 128px auto; - grid-template-rows: auto; - column-gap: 12px; - - ol { - list-style: none; - margin: 0; - padding: 0; - } - - .scores { - li { - border-radius: 0; - padding: 4px; - &+li { - border-top: 0 !important; - } - &:first-child { - border-radius: 4px 4px 0 0; - } - - &:last-child { - border-bottom-width: 1px; - border-radius: 0 0 4px 4px; - } - - h2 { - .russoOne(14px); - border: none; - text-align: center; - margin: 0; - - &:hover { - text-shadow: none; - } - } - - .ability-score { - .russoOne(22px); - text-align: center; - width: 48px; - margin: 0 auto; - height: 24px; - display: block; - } - - .ability-modifiers { - margin: 0 -4px -4px; - display: grid; - grid-template-columns: 28px auto 28px; - - .ability-mod, - .ability-save { - padding: 2px 4px; - display: block; - font-weight: bold; - font-size: 13px; - text-align: center; - border-style: solid; - } - - .ability-mod { - border-width: 1px 1px 0 0; - border-radius: 0 4px 0 0; - } - - .ability-save { - border-width: 1px 0 0 1px; - border-radius: 4px 0 0 0; - } - - .proficiency-toggle { - border: none; - background: none; - line-height: 1; - } - } - - } - } - - .skills { - li { - display: grid; - grid-template-columns: 28px auto 18px 28px; - align-items: center; - - - .proficiency-toggle { - border: none; - background: none; - height: 23px; - line-height: 23px; - padding: 0 4px; - } - - .skill-name { - &:hover { - text-shadow: none; - } - } - - .skill-ability { - text-transform: capitalize; - } - - .skill-mod { - text-align: right; - padding-right: 4px; - } - } - } - } - - .traits-resources { - grid-template-rows: 32px auto; - nav { - margin-bottom: 4px; - - button { - display: inline-block; - width: auto; - background: none; - border: none; - border-bottom: 3px solid transparent; - border-radius: 0; - margin: 0; - padding: 0 4px; - line-height: 1.6; - .russoOne(14px); - - &+button { - margin-left: 8px; - } - } - } - - section.traits { - display: grid; - grid-template-columns: 1fr 1fr; - grid-gap: 16px; - grid-row-gap: 8px; - - input, - select { - display: block; - width: 100%; - text-align: left; - } - - label { - font-size: 13px; - } - - .trait-selector { - background: none; - border: none; - display: inline; - width: auto; - &:hover { - text-shadow: none; - } - i.fas { - float: none; - &:hover { - text-shadow: none; - } - - } - - } - - .languages { - grid-column-end: span 1; - label { - &:hover { - cursor: pointer; - } - } - } - - .traits-list { - li { - display: inline; - - &::after { - content: ','; - } - - &:last-child::after { - content: ''; - } - } - } - - ul.passives { - grid-column-end: span 2; - list-style: none; - padding: 0; - margin: 0; - display: grid; - grid-template-columns: 1fr 1fr; - grid-gap: 4px; - grid-row-gap: 4px; - - strong { - font-size: 13px; - - } - } - } - - section.resources { - .resource-items { - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 12px; - - .resource { - - h1 { - border: none; - margin: 0; - - input { - font-family: 'Russo One'; - font-size: 16px; - font-weight: 400; - text-align: center; - margin-bottom: 4px; - border-radius: 0; - } - } - - .attribute-value, - .attribute-value input { - .russoOne(22px); - text-align: center; - line-height: 1; - } - - .attribute-value { - display: grid; - grid-template-columns: auto 14px auto; - - input { - display: block; - width: 100%; - } - - .value-number { - display: block; - width: 100%; - text-align: right; - padding: 0px 3px; - &:last-child { - text-align: left; - } - } - - span.value-number { - padding: 1px 4px; - } - - } - - .attribute-footer { - margin: 0; - display: grid; - grid-template-columns: 1fr 1fr; - - label { - text-align: center; - } - - } - } - } - - .counters { - border: none; - margin: 16px 0; - display: grid; - grid-template-columns: repeat(3, 1fr); - - .counter { - height: auto; - border: none; - text-align: center; - - h4 { - font-size: 13px; - margin: 0; - //display: inline; - &.rollable { - &:hover { - text-shadow: none; - } - } - } - - .counter-value { - display: inline; - text-align: left; - } - - input[type="text"] { - display: inline-block; - width: 10px; - } - - input[type="checkbox"] { - display: inline-block; - } - - .death-success, - .death-fail { - display: inline-block; - - } - - .death-success { - margin-right: 8px; - - } - - } - } - } - } - } - - .tab.inventory { - &>.panel { - grid-template-rows: 32px 32px 24px auto; - } - - .currency-encumbrance { - display: grid; - grid-template-columns: 200px auto; - margin-bottom: 8px; - align-items: center; - } - - .currency { - .russoOne(14px); - - input { - display: inline-block; - width: 128px; - .openSans(13px); - } - } - - .encumbrance-wrapper { - display: grid; - grid-template-columns: 400px 100px; - width: 500px; - justify-self: end; - - .encumbrance-label { - font-size: 12px; - line-height: 14px; - width: 100%; - text-shadow: none; - padding: 0; - margin: 0; - height: auto; - text-align: center; - margin-left: -2px; - border-radius: 0 4px 4px 0; - } - - .encumbrance { - position: relative; - border-radius: 4px; - height: 16px; - margin: 0; - width: 100%; - - .encumbrance-bar { - position: absolute; - top: 0; - left: 0; - height: 100%; - border-radius: 4px; - border: none; - } - } - } - } - .tab.features { - &>.panel { - grid-template-rows: 24px auto; - } - } - .tab.powerbook { - &>.panel { - grid-template-rows: 32px 24px 24px auto; - } - h3.power-dc { - line-height: 24px; - } - .powercasting-ability { - display: grid; - grid-template-columns: 2fr 1fr 1fr; - label, h3 { - .russoOne(13px); - border-bottom: none; - } - .power-dc { - grid-column-start: 3; - } - } - } - .tab.biography { - grid-template-columns: 1fr 2fr; - grid-template-rows: 100%; - column-gap: 16px; - padding-bottom: 8px; - max-width: 100%; - &.active { - display: grid; - } - &>.panel { - display: block; - overflow-y: auto; - } - section { - position: relative; - } - - } - .tab.notes { - &>.panel { - display: block; - overflow-y: auto; - } - section { - position: relative; - &>input { - .russoOne(16px); - text-align: left; - margin-bottom: 4px; - } - .editor .editor-edit { - top: 3px; - } - } - } - &.limited { - grid-template-rows: 144px auto; - grid-row-gap: 8px; - header { - grid-template-rows: 1fr; - } - - .tab.biography { - grid-template-columns: 100%; - } - } - } - &.npc { - .swalt-sheet { - header { - h1.character-name { - align-self: auto; - } - .npc-size { - .russoOne(18px); - line-height: 28px; - } - .attributes { - grid-template-columns: repeat(3, 1fr); - footer { - &.proficiency { - margin-top: 0; - line-height: 24px; - text-align: center; - } - &.hit-points { - display: block; - } - } - } - } - nav.sheet-navigation { - grid-template-columns: repeat(4, 1fr); - } - .tab.attributes { - .traits-resources { - display: block; - - .counter { - display: flex; - .counter-value { - margin-left: auto; - } - } - // section.traits { - // display:block; - // } - } - } - .tab.powerbook { - input.powercasting-level { - width: 48px; - } - } - .tab.biography.active { - display: block; - } - } - } -} \ No newline at end of file + +.panel { + padding: 8px; + border-radius: 4px; + .dropShadow1(); +} +.sw5e.sheet.actor.character { + min-width: 850px; + min-height: 720px; +} +.sw5e.sheet .window-content { + .openSans(12px); + + input, + select { + height: 24px; + line-height: 20px; + padding: 1px 4px; + &:hover { + box-shadow: none; + } + &:focus { + box-shadow: none; + } + } + + button { + cursor: pointer; + &:hover, + &:focus { + box-shadow: none; + } + } +} + +.sw5e.sheet.actor { + input, select, textarea { + border-color: transparent; + background: none; + + } + .swalt-sheet { + display: grid; + grid-template-rows: 182px 36px auto; + + section>h1 { + .russoOne(17px); + text-align: left; + margin-bottom: 4px; + } + + header { + display: grid; + grid-template-rows: 1fr 26px auto; + grid-template-columns: 128px 1fr; + column-gap: 8px; + grid-row-gap: 8px; + + img { + grid-column-start: 1; + grid-row-start: 1; + grid-row-end: 4; + box-sizing: border-box; + border: none; + border-radius: 0; + max-width: 100%; + max-height: 100%; + } + + h1.character-name { + grid-row: 1; + grid-column: 2; + margin: 0; + border: none; + align-self: center; + height: auto; + + .russoOne(32px); + text-transform: uppercase; + height: auto; + + input[type="text"] { + .russoOne(32px); + text-transform: uppercase; + height: auto; + border: none; + background: none; + &:focus { + text-transform: none; + } + } + } + + .level-experience { + grid-row: 1; + grid-column: 3; + + .charlevel { + .russoOne(17px); + text-align: right; + input { + display: inline-block; + width: 42px; + height: auto; + } + } + + .experience { + .russoOne(17px); + text-align: right; + line-height: 26px; + input { + display: inline-block; + width: 120px; + text-align: right; + } + } + + .xpbar { + height: 8px; + + .bar { + display: block; + height: 100%; + } + } + } + + .summary { + grid-column-start: 2; + grid-row-start: 2; + grid-column-end: 4; + display: grid; + grid-template-rows: 1fr; + grid-template-columns: repeat(4, 1fr); + + input, + .proficiency { + display: inline; + height: auto; + .russoOne(17px); + line-height: 24px; + } + + .proficiency { + line-height: 26px; + } + } + + .attributes { + grid-column-start: 2; + grid-row-start: 3; + grid-column-end: 4; + display: grid; + grid-template-columns: repeat(5, 1fr); + column-gap: 12px; + + h1 { + text-align: center; + } + + .attribute-value, + .attribute-value input { + .russoOne(22px); + text-align: center; + line-height: 1; + + } + + .attribute-value { + + &.multiple { + display: grid; + grid-template-columns: auto 14px auto; + + input { + width: 100%; + } + } + + input { + display: inline-block; + } + + .value-number { + display: inline-block; + text-align: right; + + padding: 0px 3px; + + &:last-child { + text-align: left; + } + } + + span.value-number { + padding: 1px 4px; + } + + .initiative { + padding: 1px 4px; + display: block; + } + } + + footer { + + + button { + background: none; + padding: 1px 3px; + font-size: inherit; + line-height: inherit; + display: inline-block; + width: auto; + + &:hover { + font-weight: 400; + } + } + + &.hit-points, + &.hit-dice, + &.initiative { + display: grid; + grid-template-columns: 1fr 1fr; + column-gap: 8px; + margin-top: 0; + input, + button { + //border: 1px solid @colorPaleGray; + width: 100%; + text-align: center; + } + + button { + + font-weight: 400; + margin-top: 2px; + + } + + span { + display: block; + padding: 3px 4px; + } + } + + &.speed { + margin-top: 0; + input { + text-align: center; + } + } + } + } + } + + nav.sheet-navigation { + display: grid; + grid-template-columns: repeat(6, 1fr); + column-gap: 16px; + margin: 4px 0; + + .item { + background: none; + border: none; + border-bottom: 3px solid transparent; + border-radius: 0; + margin: 0; + padding: 3px 0 0; + line-height: 1; + .russoOne(16px); + } + } + .editor { + position: static; + min-height: 32px; + padding: 0; + .editor-edit { + display: block; + font-size: 12px; + background: none; + border: none; + padding: 0; + box-shadow: none; + top: 0; + right: 0; + &:hover { + text-shadow: none; + } + } + .tox.tox-tinymce { + height: 250px !important; + } + } + .tab { + display: none; + + &.active { + display: block; + } + + .filter-list { + list-style: none; + margin: 0; + padding: 0 0 8px; + display: flex; + flex-direction: row; + justify-content: flex-end; + max-width: 100%; + + .filter-title { + display: none; + font-weight: bold; + width: 50px; + } + + .filter-item { + width: 100px; + text-align: center; + + &+.filter-item { + margin-left: 12px; + } + + &:hover { + text-shadow: none; + } + + } + } + + .group-list-header { + display: grid; + padding-right: 6px; + } + + .group-list-title { + h3 { + .russoOne(17px); + margin: 4px 0 0; + padding: 0 4px; + display: inline; + border: none; + } + + .item-create { + font-size: 12px; + i { + font-size: 10px; + } + &:hover { + text-shadow: none; + } + } + + } + + .group-list-header, + .group-list { + .item-detail { + text-align: left; + padding: 4px; + } + } + + .group-list { + height: 100%; + overflow-y: scroll; + & > li:first-child { + padding-top: 8px; + } + } + + .group-list, + .group-list ol { + list-style: none; + margin: 0 0 8px; + padding: 0; + + .item-uses { + input { + display: inline-block; + width: 32px; + margin-right: 0; + text-align: right; + } + span { + padding-left: 8px; + } + .slot-max-override { + margin-left: 5px; + &:hover { + text-shadow: none; + } + } + } + li.item { + display: grid; + + h4 { + .openSans(13px, 700); + letter-spacing: 0; + } + .item-name, + .item-detail { + padding: 4px; + line-height: 30px; + } + + .item-name { + display: flex; + + .item-image { + width: 30px; + height: 30px; + position: relative; + background-size: contain; + &::before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + content: '\f6cf'; + opacity: 0; + position: absolute; + top: 0; + left: 2px; + font-size: 26px; + } + + } + + h4 { + line-height: 30px; + display: inline-block; + height: 30px; + padding-left: 8px; + margin: 0; + } + + &.rollable:hover { + text-shadow: none; + + .item-image { + background-image: none !important; + + &::before { + opacity: 1; + } + + &:hover { + background-image: none !important; + + &::before { + opacity: 1; + } + } + } + } + } + + .item-summary { + grid-column-start: 1; + grid-column-end: -1; + padding: 4px 4px 4px 38px; + } + + .item-controls { + display: flex; + flex-direction: row; + justify-content: space-evenly; + } + + .item-control { + &:hover { + text-shadow: none; + } + + } + + } + } + + .group-grid-inventory { + grid-template-columns: auto 60px 100px 100px 100px; + + &.group-list-title { + .item-controls { + grid-column-start: 5; + } + } + } + .group-grid-features { + grid-template-columns: auto 100px 100px 100px; + &.group-list-title { + display: grid; + } + .item-controls { + grid-column-start: 4; + } + + } + .group-grid-powers { + grid-template-columns: auto repeat(5, 100px); + &.group-list-title { + display: grid; + align-items: end; + .item-detail { + padding: 0 4px; + } + } + + + } + .group-grid-fav-items { + grid-template-columns: auto 60px 30px 30px 50px; + &.group-list-title { + display: grid; + align-items: end; + .item-detail { + padding: 0 4px; + } + } + } + + } + + .tab > .panel { + height: 100%; + overflow: hidden; + display: grid; + } + + .tab.attributes { + &.active { + display: grid; + } + + grid-template-columns: 350px auto; + grid-template-rows: auto; + column-gap: 16px; + + .abilities { + display: grid; + grid-template-columns: 128px auto; + grid-template-rows: auto; + column-gap: 12px; + + ol { + list-style: none; + margin: 0; + padding: 0; + } + + .scores { + li { + border-radius: 0; + padding: 4px; + &+li { + border-top: 0 !important; + } + &:first-child { + border-radius: 4px 4px 0 0; + } + + &:last-child { + border-bottom-width: 1px; + border-radius: 0 0 4px 4px; + } + + h2 { + .russoOne(14px); + border: none; + text-align: center; + margin: 0; + + &:hover { + text-shadow: none; + } + } + + .ability-score { + .russoOne(22px); + text-align: center; + width: 48px; + margin: 0 auto; + height: 24px; + display: block; + } + + .ability-modifiers { + margin: 0 -4px -4px; + display: grid; + grid-template-columns: 28px auto 28px; + + .ability-mod, + .ability-save { + padding: 2px 4px; + display: block; + font-weight: bold; + font-size: 13px; + text-align: center; + border-style: solid; + } + + .ability-mod { + border-width: 1px 1px 0 0; + border-radius: 0 4px 0 0; + } + + .ability-save { + border-width: 1px 0 0 1px; + border-radius: 4px 0 0 0; + } + + .proficiency-toggle { + border: none; + background: none; + line-height: 1; + } + } + + } + } + + .skills { + li { + display: grid; + grid-template-columns: 28px auto 18px 28px; + align-items: center; + + + .proficiency-toggle { + border: none; + background: none; + height: 23px; + line-height: 23px; + padding: 0 4px; + } + + .skill-name { + &:hover { + text-shadow: none; + } + } + + .skill-ability { + text-transform: capitalize; + } + + .skill-mod { + text-align: right; + padding-right: 4px; + } + } + } + } + + .traits-resources { + grid-template-rows: 32px auto; + nav { + margin-bottom: 4px; + + button { + display: inline-block; + width: auto; + background: none; + border: none; + border-bottom: 3px solid transparent; + border-radius: 0; + margin: 0; + padding: 0 4px; + line-height: 1.6; + .russoOne(14px); + + &+button { + margin-left: 8px; + } + } + } + + section.traits { + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: 16px; + grid-row-gap: 8px; + + input, + select { + display: block; + width: 100%; + text-align: left; + } + + label { + font-size: 13px; + } + + .trait-selector { + background: none; + border: none; + display: inline; + width: auto; + &:hover { + text-shadow: none; + } + i.fas { + float: none; + &:hover { + text-shadow: none; + } + + } + + } + + .languages { + grid-column-end: span 1; + label { + &:hover { + cursor: pointer; + } + } + } + + .traits-list { + li { + display: inline; + + &::after { + content: ','; + } + + &:last-child::after { + content: ''; + } + } + } + + ul.passives { + grid-column-end: span 2; + list-style: none; + padding: 0; + margin: 0; + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: 4px; + grid-row-gap: 4px; + + strong { + font-size: 13px; + + } + } + } + + section.resources { + .resource-items { + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 12px; + + .resource { + + h1 { + border: none; + margin: 0; + + input { + font-family: 'Russo One'; + font-size: 16px; + font-weight: 400; + text-align: center; + margin-bottom: 4px; + border-radius: 0; + } + } + + .attribute-value, + .attribute-value input { + .russoOne(22px); + text-align: center; + line-height: 1; + } + + .attribute-value { + display: grid; + grid-template-columns: auto 14px auto; + + input { + display: block; + width: 100%; + } + + .value-number { + display: block; + width: 100%; + text-align: right; + padding: 0px 3px; + &:last-child { + text-align: left; + } + } + + span.value-number { + padding: 1px 4px; + } + + } + + .attribute-footer { + margin: 0; + display: grid; + grid-template-columns: 1fr 1fr; + + label { + text-align: center; + } + + } + } + } + + .counters { + border: none; + margin: 16px 0; + display: grid; + grid-template-columns: repeat(3, 1fr); + + .counter { + height: auto; + border: none; + text-align: center; + + h4 { + font-size: 13px; + margin: 0; + //display: inline; + &.rollable { + &:hover { + text-shadow: none; + } + } + } + + .counter-value { + display: inline; + text-align: left; + } + + input[type="text"] { + display: inline-block; + width: 10px; + } + + input[type="checkbox"] { + display: inline-block; + } + + .death-success, + .death-fail { + display: inline-block; + + } + + .death-success { + margin-right: 8px; + + } + + } + } + } + } + } + + .tab.inventory { + &>.panel { + grid-template-rows: 32px 32px 24px auto; + } + + .currency-encumbrance { + display: grid; + grid-template-columns: 200px auto; + margin-bottom: 8px; + align-items: center; + } + + .currency { + .russoOne(14px); + + input { + display: inline-block; + width: 128px; + .openSans(13px); + } + } + + .encumbrance-wrapper { + display: grid; + grid-template-columns: 400px 100px; + width: 500px; + justify-self: end; + + .encumbrance-label { + font-size: 12px; + line-height: 14px; + width: 100%; + text-shadow: none; + padding: 0; + margin: 0; + height: auto; + text-align: center; + margin-left: -2px; + border-radius: 0 4px 4px 0; + } + + .encumbrance { + position: relative; + border-radius: 4px; + height: 16px; + margin: 0; + width: 100%; + + .encumbrance-bar { + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 4px; + border: none; + } + } + } + } + .tab.features { + &>.panel { + grid-template-rows: 24px auto; + } + } + .tab.powerbook { + &>.panel { + grid-template-rows: 32px 24px 24px auto; + } + h3.power-dc { + line-height: 24px; + } + .powercasting-ability { + display: grid; + grid-template-columns: 2fr 1fr 1fr; + label, h3 { + .russoOne(13px); + border-bottom: none; + } + .power-dc { + grid-column-start: 3; + } + } + } + .tab.biography { + grid-template-columns: 1fr 2fr; + grid-template-rows: 100%; + column-gap: 16px; + padding-bottom: 8px; + max-width: 100%; + &.active { + display: grid; + } + &>.panel { + display: block; + overflow-y: auto; + } + section { + position: relative; + } + + } + .tab.notes { + &>.panel { + display: block; + overflow-y: auto; + } + section { + position: relative; + &>input { + .russoOne(16px); + text-align: left; + margin-bottom: 4px; + } + .editor .editor-edit { + top: 3px; + } + } + } + &.limited { + grid-template-rows: 144px auto; + grid-row-gap: 8px; + header { + grid-template-rows: 1fr; + } + + .tab.biography { + grid-template-columns: 100%; + } + } + } + &.npc { + .swalt-sheet { + header { + h1.character-name { + align-self: auto; + } + .npc-size { + .russoOne(18px); + line-height: 28px; + } + .attributes { + grid-template-columns: repeat(3, 1fr); + footer { + &.proficiency { + margin-top: 0; + line-height: 24px; + text-align: center; + } + &.hit-points { + display: block; + } + } + } + } + nav.sheet-navigation { + grid-template-columns: repeat(4, 1fr); + } + .tab.attributes { + .traits-resources { + display: block; + + .counter { + display: flex; + .counter-value { + margin-left: auto; + } + } + // section.traits { + // display:block; + // } + } + } + .tab.powerbook { + input.powercasting-level { + width: 48px; + } + } + .tab.biography.active { + display: block; + } + } + } +} diff --git a/less/update/components/actor-themes.less b/less/update/components/actor-themes.less index 6e2a5f44..45ca2d1c 100644 --- a/less/update/components/actor-themes.less +++ b/less/update/components/actor-themes.less @@ -1,416 +1,416 @@ -.panel { - background: @actorPanelBgColor; -} - -.sw5e.sheet .window-content { - color: @colorBlack; - background: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6); - input, - select { - color: @colorBlack; - &:hover { - border-color: @inputBorderHover; - } - - &:focus { - border-color: @inputBorderFocus; - } - } - - button { - - &:hover, - &:focus { - border-color: @inputBorderFocus; - } - } -} - -.sw5e.sheet.actor { - color: @colorBlack; - input, select, textarea { - &:hover { - border-color: @inputBorderFocus; - } - &:focus { - border-color: @inputBorderFocus; - } - } - .swalt-sheet { - section>h1 { - border-bottom: 2px solid @colorBlue; - } - - header { - - h1.character-name { - color: @actorNameColor; - - input[type="text"] { - color: @actorNameColor; - } - } - - .level-experience { - - .xpbar { - border: 1px solid @actorXPBarBorder; - background-color: @actorXPBarBackground; - - .bar { - background-color: @actorXPBarColor; - } - } - } - - .summary { - - input, - .proficiency { - color: @actorProficiencyTextColor; - } - } - - .attributes { - - .attribute-value, - .attribute-value input { - color: @actorAttributeInputColor; - } - - .attribute-value { - - .value-separator { - color: @actorSeparatorColor; - } - } - - footer { - button { - border: 1px solid @actorAttributeButtonBorder; - - &:hover { - color: @actorAttributeButtonBorderHover; - } - } - - &.hit-points, - &.hit-dice, - &.initiative { - button { - border: 1px solid @actorAttributeButtonBorder; - color: @colorRed; - - &:hover { - border-color: @actorAttributeButtonBorderHover; - } - } - - } - - } - } - } - - nav.sheet-navigation { - .item { - color: @actorNavigationTabsColor; - - &.active { - color: @actorNavigationTabsActiveColor; - border-bottom-color: @actorNavigationTabsActiveColor; - - &:hover { - background: @actorNavigationTabsHoverBgColor; - } - } - - &:hover { - background: @actorNavigationTabsHoverBgColor; - } - } - } - - .tab { - - .filter-list { - - .filter-item { - border-bottom: 2px solid @actorFilterBorderColor; - - &:hover { - color: @actorFilterHoverColor; - } - - &.active { - color: @actorFilterActiveColor; - border-bottom-color: @actorFilterActiveColor; - } - } - } - - .group-list-header { - background: @actorGroupListHeaderBgColor; - } - - .group-list-title { - border-bottom: 1px solid @actorGroupListTitleBorderColor; - } - - .group-list-header, - .group-list { - .item-detail { - border-left: 1px solid @actorGroupListColumnBorderColor; - } - } - - .group-list, - .group-list ol { - li.item { - &:nth-child(even) { - background-color: @actorGroupListAltRowColor; - } - - h4 { - color: @colorBlack; - } - - - .item-name { - - .item-image { - - &::before { - color: @actorItemRollableD20Color; - } - - } - - - &.rollable:hover { - - .item-image { - &:hover { - &::before { - color: @actorItemRollableD20HoverColor; - } - } - } - } - } - - .item-control { - &:hover { - color: @linkColor !important; - } - - &.item-toggle { - color: @actorItemControlToggleColor; - - &.active { - color: @colorBlack; - } - } - } - - } - } - - - - } - - - .tab.attributes { - .abilities { - - .scores { - li { - border: 1px solid @actorAbilityBorderColor; - - h2 { - &:hover { - color: @linkColor; - } - } - - .ability-score { - color: @actorAbilityScoreColor; - } - - .ability-modifiers { - - .ability-mod, - .ability-save { - border-color: @actorAbilityBorderColor; - } - - } - - } - } - - .skills { - li { - &:nth-child(even) { - background-color: @actorSkillsAltRowColor; - } - .proficiency-toggle { - color: @colorBlack; - } - - .skill-name { - &:hover { - color: @linkColor; - } - } - } - } - } - - .traits-resources { - nav { - button { - color: @actorNavigationTabsColor; - - &.active { - color: @actorNavigationTabsActiveColor; - border-bottom-color: @actorNavigationTabsActiveColor; - - &:hover { - background: @actorNavigationTabsActiveHoverBgColor; - } - } - - &:hover { - background: @actorNavigationTabsHoverBgColor; - } - - } - } - - section.traits { - .trait-selector { - i.fas { - color: @linkColor; - } - } - - .languages { - label { - &:hover { - color: @linkColor; - } - } - } - - - } - - section.resources { - .resource-items { - .resource { - h1 { - - input { - color: @headingColor; - border-bottom: 2px solid @headerBorderColor; - } - } - - .attribute-value, - .attribute-value input { - color: @actorAttributeInputColor; - } - - .attribute-value { - .value-separator { - color: @actorSeparatorColor; - } - - } - } - } - - .counters { - .counter { - h4 { - &.rollable { - &:hover { - color: @linkColor; - } - } - } - - - .death-success { - i { - color: @colorGreen; - } - } - - .death-fail { - i { - color: @colorRed; - } - } - } - } - } - } - } - - .tab.inventory { - .currency { - color: @headingColor; - } - - .encumbrance-wrapper { - .encumbrance-label { - background: @actorEncumbranceLabelBackground; - color: @actorEncumbranceTextColor; - border: 1px solid @actorEncumbranceBorderColor; - } - - .encumbrance { - background: @actorEncumbranceBarBgColor; - .encumbrance-bar { - background: @actorEncumbranceBarColor; - } - } - } - } - - - .tab.powerbook { - .powercasting-ability { - label, - h3 { - color: @headingColor; - - span { - color: @colorBlack; - } - } - } - } - - .tab.notes { - section { - &>input { - color: @headingColor; - border-bottom: 2px solid @headerBorderColor; - } - } - } - } - &.npc { - .swalt-sheet { - header { - .experience { - color: @actorProficiencyTextColor; - } - } - } - } +.panel { + background: @actorPanelBgColor; +} + +.sw5e.sheet .window-content { + color: @colorBlack; + background: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6); + input, + select { + color: @colorBlack; + &:hover { + border-color: @inputBorderHover; + } + + &:focus { + border-color: @inputBorderFocus; + } + } + + button { + + &:hover, + &:focus { + border-color: @inputBorderFocus; + } + } +} + +.sw5e.sheet.actor { + color: @colorBlack; + input, select, textarea { + &:hover { + border-color: @inputBorderFocus; + } + &:focus { + border-color: @inputBorderFocus; + } + } + .swalt-sheet { + section>h1 { + border-bottom: 2px solid @colorBlue; + } + + header { + + h1.character-name { + color: @actorNameColor; + + input[type="text"] { + color: @actorNameColor; + } + } + + .level-experience { + + .xpbar { + border: 1px solid @actorXPBarBorder; + background-color: @actorXPBarBackground; + + .bar { + background-color: @actorXPBarColor; + } + } + } + + .summary { + + input, + .proficiency { + color: @actorProficiencyTextColor; + } + } + + .attributes { + + .attribute-value, + .attribute-value input { + color: @actorAttributeInputColor; + } + + .attribute-value { + + .value-separator { + color: @actorSeparatorColor; + } + } + + footer { + button { + border: 1px solid @actorAttributeButtonBorder; + + &:hover { + color: @actorAttributeButtonBorderHover; + } + } + + &.hit-points, + &.hit-dice, + &.initiative { + button { + border: 1px solid @actorAttributeButtonBorder; + color: @colorRed; + + &:hover { + border-color: @actorAttributeButtonBorderHover; + } + } + + } + + } + } + } + + nav.sheet-navigation { + .item { + color: @actorNavigationTabsColor; + + &.active { + color: @actorNavigationTabsActiveColor; + border-bottom-color: @actorNavigationTabsActiveColor; + + &:hover { + background: @actorNavigationTabsHoverBgColor; + } + } + + &:hover { + background: @actorNavigationTabsHoverBgColor; + } + } + } + + .tab { + + .filter-list { + + .filter-item { + border-bottom: 2px solid @actorFilterBorderColor; + + &:hover { + color: @actorFilterHoverColor; + } + + &.active { + color: @actorFilterActiveColor; + border-bottom-color: @actorFilterActiveColor; + } + } + } + + .group-list-header { + background: @actorGroupListHeaderBgColor; + } + + .group-list-title { + border-bottom: 1px solid @actorGroupListTitleBorderColor; + } + + .group-list-header, + .group-list { + .item-detail { + border-left: 1px solid @actorGroupListColumnBorderColor; + } + } + + .group-list, + .group-list ol { + li.item { + &:nth-child(even) { + background-color: @actorGroupListAltRowColor; + } + + h4 { + color: @colorBlack; + } + + + .item-name { + + .item-image { + + &::before { + color: @actorItemRollableD20Color; + } + + } + + + &.rollable:hover { + + .item-image { + &:hover { + &::before { + color: @actorItemRollableD20HoverColor; + } + } + } + } + } + + .item-control { + &:hover { + color: @linkColor !important; + } + + &.item-toggle { + color: @actorItemControlToggleColor; + + &.active { + color: @colorBlack; + } + } + } + + } + } + + + + } + + + .tab.attributes { + .abilities { + + .scores { + li { + border: 1px solid @actorAbilityBorderColor; + + h2 { + &:hover { + color: @linkColor; + } + } + + .ability-score { + color: @actorAbilityScoreColor; + } + + .ability-modifiers { + + .ability-mod, + .ability-save { + border-color: @actorAbilityBorderColor; + } + + } + + } + } + + .skills { + li { + &:nth-child(even) { + background-color: @actorSkillsAltRowColor; + } + .proficiency-toggle { + color: @colorBlack; + } + + .skill-name { + &:hover { + color: @linkColor; + } + } + } + } + } + + .traits-resources { + nav { + button { + color: @actorNavigationTabsColor; + + &.active { + color: @actorNavigationTabsActiveColor; + border-bottom-color: @actorNavigationTabsActiveColor; + + &:hover { + background: @actorNavigationTabsActiveHoverBgColor; + } + } + + &:hover { + background: @actorNavigationTabsHoverBgColor; + } + + } + } + + section.traits { + .trait-selector { + i.fas { + color: @linkColor; + } + } + + .languages { + label { + &:hover { + color: @linkColor; + } + } + } + + + } + + section.resources { + .resource-items { + .resource { + h1 { + + input { + color: @headingColor; + border-bottom: 2px solid @headerBorderColor; + } + } + + .attribute-value, + .attribute-value input { + color: @actorAttributeInputColor; + } + + .attribute-value { + .value-separator { + color: @actorSeparatorColor; + } + + } + } + } + + .counters { + .counter { + h4 { + &.rollable { + &:hover { + color: @linkColor; + } + } + } + + + .death-success { + i { + color: @colorGreen; + } + } + + .death-fail { + i { + color: @colorRed; + } + } + } + } + } + } + } + + .tab.inventory { + .currency { + color: @headingColor; + } + + .encumbrance-wrapper { + .encumbrance-label { + background: @actorEncumbranceLabelBackground; + color: @actorEncumbranceTextColor; + border: 1px solid @actorEncumbranceBorderColor; + } + + .encumbrance { + background: @actorEncumbranceBarBgColor; + .encumbrance-bar { + background: @actorEncumbranceBarColor; + } + } + } + } + + + .tab.powerbook { + .powercasting-ability { + label, + h3 { + color: @headingColor; + + span { + color: @colorBlack; + } + } + } + } + + .tab.notes { + section { + &>input { + color: @headingColor; + border-bottom: 2px solid @headerBorderColor; + } + } + } + } + &.npc { + .swalt-sheet { + header { + .experience { + color: @actorProficiencyTextColor; + } + } + } + } } \ No newline at end of file diff --git a/less/update/components/forms-global.less b/less/update/components/forms-global.less index 9dc02f30..f5c1aee6 100644 --- a/less/update/components/forms-global.less +++ b/less/update/components/forms-global.less @@ -1,105 +1,105 @@ -input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea { - border-radius: 4px; - transition: all 0.3s; - &:hover { - box-shadow: none; - } - &:focus { - box-shadow: none; - } -} -input[type=range] { - -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ - width: 100%; /* Specific width is required for Firefox. */ - background: transparent; /* Otherwise white in Chrome */ -} - -input[type=range]::-webkit-slider-thumb{ - -webkit-appearance: none; - background: @colorRed; - width: 12px; - height: 12px; - border-radius: 32px; - cursor: pointer; - box-shadow: none; -} -input[type=range]::-moz-range-thumb{ - -webkit-appearance: none; - background: @colorRed; - width: 12px; - height: 12px; - border-radius: 32px; - cursor: pointer; - box-shadow: none; -} -input[type=range]::-ms-thumb { - -webkit-appearance: none; - background: @colorRed; - width: 12px; - height: 12px; - border-radius: 32px; - cursor: pointer; - box-shadow: none; -} - -input[type=range]::-webkit-slider-runnable-track { - width: 100%; - height: 6px; - cursor: pointer; - background: @colorLightBlue; - border-radius: 4px; - border: 1px solid @colorBlue; - box-shadow: none; -} -input[type=range]:focus::-webkit-slider-runnable-track { - background: @colorBlue; -} -input[type=range]::-moz-range-track { - width: 100%; - height: 6px; - cursor: pointer; - background: @colorLightBlue; - border-radius: 4px; - border: 1px solid @colorBlue; - box-shadow: none; -} -input[type=range]::-ms-track { - width: 100%; - height: 6px; - cursor: pointer; - background: @colorLightBlue; - border-radius: 4px; - border: 1px solid @colorBlue; - box-shadow: none; -} -input[type=range]:focus { - outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */ -} - -input[type=range]::-ms-track { - width: 100%; - cursor: pointer; - - /* Hides the slider so custom styles can be added */ - background: transparent; - border-color: transparent; - color: transparent; -} - -button, input[type="button"], input[type="submit"], input[type="reset"] { - .openSans(13px, 700); - text-align: center; - border: none; - border-radius: 4px; - cursor: pointer; - transition: all 0.3s; - &:hover, &:focus { - box-shadow: none; - } - &:disabled { - opacity: 0.6; - cursor: default; - - } - -} +input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea { + border-radius: 4px; + transition: all 0.3s; + &:hover { + box-shadow: none; + } + &:focus { + box-shadow: none; + } +} +input[type=range] { + -webkit-appearance: none; /* Hides the slider so that custom slider can be made */ + width: 100%; /* Specific width is required for Firefox. */ + background: transparent; /* Otherwise white in Chrome */ +} + +input[type=range]::-webkit-slider-thumb{ + -webkit-appearance: none; + background: @colorRed; + width: 12px; + height: 12px; + border-radius: 32px; + cursor: pointer; + box-shadow: none; +} +input[type=range]::-moz-range-thumb{ + -webkit-appearance: none; + background: @colorRed; + width: 12px; + height: 12px; + border-radius: 32px; + cursor: pointer; + box-shadow: none; +} +input[type=range]::-ms-thumb { + -webkit-appearance: none; + background: @colorRed; + width: 12px; + height: 12px; + border-radius: 32px; + cursor: pointer; + box-shadow: none; +} + +input[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: 6px; + cursor: pointer; + background: @colorLightBlue; + border-radius: 4px; + border: 1px solid @colorBlue; + box-shadow: none; +} +input[type=range]:focus::-webkit-slider-runnable-track { + background: @colorBlue; +} +input[type=range]::-moz-range-track { + width: 100%; + height: 6px; + cursor: pointer; + background: @colorLightBlue; + border-radius: 4px; + border: 1px solid @colorBlue; + box-shadow: none; +} +input[type=range]::-ms-track { + width: 100%; + height: 6px; + cursor: pointer; + background: @colorLightBlue; + border-radius: 4px; + border: 1px solid @colorBlue; + box-shadow: none; +} +input[type=range]:focus { + outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */ +} + +input[type=range]::-ms-track { + width: 100%; + cursor: pointer; + + /* Hides the slider so custom styles can be added */ + background: transparent; + border-color: transparent; + color: transparent; +} + +button, input[type="button"], input[type="submit"], input[type="reset"] { + .openSans(13px, 700); + text-align: center; + border: none; + border-radius: 4px; + cursor: pointer; + transition: all 0.3s; + &:hover, &:focus { + box-shadow: none; + } + &:disabled { + opacity: 0.6; + cursor: default; + + } + +} diff --git a/less/update/components/forms-themes.less b/less/update/components/forms-themes.less index 45ca5f2d..583f73c1 100644 --- a/less/update/components/forms-themes.less +++ b/less/update/components/forms-themes.less @@ -1,53 +1,53 @@ -input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea { - border: 1px solid @inputBorderNormal; - color: @inputTextColor; - &:hover { - border-color: @inputBorderHover; - } - &:focus { - border-color: @inputBorderFocus; - } - &::placeholder { - color: @inputTextColor; - opacity: 0.5; - } - ::-ms-input-placeholder { /* Microsoft Edge */ - color: @inputTextColor; - opacity: 0.5; - } -} - -button, input[type="button"], input[type="submit"], input[type="reset"] { - background: @buttonBackground; - color: @buttonTextColor; - &:hover, &:focus { - background: @buttonHoverBackground; - } - &:disabled { - &:hover, &:focus { - background: @buttonBackground; - } - } - -} -input[type="reset"], button.secondary, button[type="reset"], input[type="button"].secondary, input[type="submit"].secondary { - background: @buttonSecondaryBackground; - color: @buttonSecondaryTextColor; - &:hover { - background: @buttonSecondaryHoverBackground; - } - &:disabled { - &:hover, &:focus { - background: @buttonSecondaryBackground; - } - } -} - -form { - button { - border: none; - } - .notes, .hint { - color: rgba(@bodyFontColor, 0.8); - } +input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea { + border: 1px solid @inputBorderNormal; + color: @inputTextColor; + &:hover { + border-color: @inputBorderHover; + } + &:focus { + border-color: @inputBorderFocus; + } + &::placeholder { + color: @inputTextColor; + opacity: 0.5; + } + ::-ms-input-placeholder { /* Microsoft Edge */ + color: @inputTextColor; + opacity: 0.5; + } +} + +button, input[type="button"], input[type="submit"], input[type="reset"] { + background: @buttonBackground; + color: @buttonTextColor; + &:hover, &:focus { + background: @buttonHoverBackground; + } + &:disabled { + &:hover, &:focus { + background: @buttonBackground; + } + } + +} +input[type="reset"], button.secondary, button[type="reset"], input[type="button"].secondary, input[type="submit"].secondary { + background: @buttonSecondaryBackground; + color: @buttonSecondaryTextColor; + &:hover { + background: @buttonSecondaryHoverBackground; + } + &:disabled { + &:hover, &:focus { + background: @buttonSecondaryBackground; + } + } +} + +form { + button { + border: none; + } + .notes, .hint { + color: rgba(@bodyFontColor, 0.8); + } } \ No newline at end of file diff --git a/less/update/components/foundry-app-window-themes.less b/less/update/components/foundry-app-window-themes.less index df745c7e..d16c88cf 100644 --- a/less/update/components/foundry-app-window-themes.less +++ b/less/update/components/foundry-app-window-themes.less @@ -1,76 +1,76 @@ -.window-app { - border-radius: 4px; - border: none; - .dropShadow2(); - & > header { - background: @windowHeaderBackground; - border-radius: 4px 4px 0 0; - border: none; - .dropShadow1(); - margin-bottom: 4px; - } - .window-content { - background: @primaryBackground; - color: @bodyFontColor; - footer { - margin-top: 8px; - } - } - &.minimized { - & > header, & > .window-header { - border: none; - border-radius: 4px; - margin: 0; - } - } -} - -#client-settings { - nav.tabs { - border: none; - font-size: 17px; - line-height: 1.6; - a.item { - border-bottom: 3px solid transparent; - color: @bodyFontColor; - &:hover { - text-decoration: none; - } - &.active { - text-shadow: none; - border-bottom-color: @sidebarTabLinkUnderline; - } - } - } - section.content { - border: none; - margin-top: 4px; - } -} - -.dialog-buttons { - margin-top: 8px; - button:last-child { - margin-right: 0; - } - button:not(.default) { - border: 1px solid @buttonBackground; - margin-right: 4px; - background: @buttonSecondaryBackground; - color: @buttonSecondaryTextColor; - &:hover { - background: @buttonSecondaryHoverBackground; - } - - } - button.normal.default { - border: none; - background: @buttonBackground; - color: @buttonTextColor; - &:hover { - background: @buttonHoverBackground; - } - } - - +.window-app { + border-radius: 4px; + border: none; + .dropShadow2(); + & > header { + background: @windowHeaderBackground; + border-radius: 4px 4px 0 0; + border: none; + .dropShadow1(); + margin-bottom: 4px; + } + .window-content { + background: @primaryBackground; + color: @bodyFontColor; + footer { + margin-top: 8px; + } + } + &.minimized { + & > header, & > .window-header { + border: none; + border-radius: 4px; + margin: 0; + } + } +} + +#client-settings { + nav.tabs { + border: none; + font-size: 17px; + line-height: 1.6; + a.item { + border-bottom: 3px solid transparent; + color: @bodyFontColor; + &:hover { + text-decoration: none; + } + &.active { + text-shadow: none; + border-bottom-color: @sidebarTabLinkUnderline; + } + } + } + section.content { + border: none; + margin-top: 4px; + } +} + +.dialog-buttons { + margin-top: 8px; + button:last-child { + margin-right: 0; + } + button:not(.default) { + border: 1px solid @buttonBackground; + margin-right: 4px; + background: @buttonSecondaryBackground; + color: @buttonSecondaryTextColor; + &:hover { + background: @buttonSecondaryHoverBackground; + } + + } + button.normal.default { + border: none; + background: @buttonBackground; + color: @buttonTextColor; + &:hover { + background: @buttonHoverBackground; + } + } + + } \ No newline at end of file diff --git a/less/update/components/foundry-nav-themes.less b/less/update/components/foundry-nav-themes.less index 890e1a26..fd4af78c 100644 --- a/less/update/components/foundry-nav-themes.less +++ b/less/update/components/foundry-nav-themes.less @@ -1,84 +1,84 @@ -#navigation { - #nav-toggle { - background: @foundryNavBgColor; - color: @foundryNavTextColor; - - transform: rotate(-90deg); - - } - .nav-item { - border: 1px solid @foundryNavBorderColor; - } - #scene-list { - .scene { - border: 1px solid @foundryNavBorderColor; - background: rgba(@foundryNavBgColor, 0.4); - a { - color: @foundryNavSceneLinkColor; - } - &.gm { - border: 1px solid @foundryNavBorderColorGM; - background: rgba(@foundryNavBgColorGM, 0.4); - } - &.view, &.context { - box-shadow: 0 0 8px @foundryNavContextShadow; - border-color: @foundryNavContextBorderColor; - } - &.active { - border-color: @foundryNavActiveBorderColor; - background: @foundryNavActiveBgColor; - box-shadow: 0 0 8px @foundryNavActiveGlow; - } - } - } -} -#controls { - .scene-control, .control-tool { - background: @foundryNavBgColor; - color: @foundryNavTextColor; - border: 1px solid @foundryNavBorderColor; - box-shadow: none; - &:hover { - background: @foundryNavBgColor; - box-shadow: 0 0 8px @foundryNavContextShadow; - } - &.active { - border-color: @foundryNavActiveBorderColor; - background: @foundryNavActiveBgColor; - box-shadow: 0 0 8px @foundryNavActiveGlow; - } - } -} -#players { - border: none; - border-radius: 4px; - h3 { - background: @sidebarTabBackground; - border: none; - margin: 0; - padding: 0 8px; - font-size: 17px; - line-height: 30px; - .dropShadow1(); - border-radius: 4px 4px 0 0; - .players-mode { - color: @foundryPlayersArrowColor; - } - } - ol { - margin: 4px 0; - .player-name.self { - color: inherit; - font-weight: 700; - } - .player { - color: @bodyFontColor; - } - .player-active { - margin-top: 7px; - &.active { - box-shadow: none; - } - } - } +#navigation { + #nav-toggle { + background: @foundryNavBgColor; + color: @foundryNavTextColor; + + transform: rotate(-90deg); + + } + .nav-item { + border: 1px solid @foundryNavBorderColor; + } + #scene-list { + .scene { + border: 1px solid @foundryNavBorderColor; + background: rgba(@foundryNavBgColor, 0.4); + a { + color: @foundryNavSceneLinkColor; + } + &.gm { + border: 1px solid @foundryNavBorderColorGM; + background: rgba(@foundryNavBgColorGM, 0.4); + } + &.view, &.context { + box-shadow: 0 0 8px @foundryNavContextShadow; + border-color: @foundryNavContextBorderColor; + } + &.active { + border-color: @foundryNavActiveBorderColor; + background: @foundryNavActiveBgColor; + box-shadow: 0 0 8px @foundryNavActiveGlow; + } + } + } +} +#controls { + .scene-control, .control-tool { + background: @foundryNavBgColor; + color: @foundryNavTextColor; + border: 1px solid @foundryNavBorderColor; + box-shadow: none; + &:hover { + background: @foundryNavBgColor; + box-shadow: 0 0 8px @foundryNavContextShadow; + } + &.active { + border-color: @foundryNavActiveBorderColor; + background: @foundryNavActiveBgColor; + box-shadow: 0 0 8px @foundryNavActiveGlow; + } + } +} +#players { + border: none; + border-radius: 4px; + h3 { + background: @sidebarTabBackground; + border: none; + margin: 0; + padding: 0 8px; + font-size: 17px; + line-height: 30px; + .dropShadow1(); + border-radius: 4px 4px 0 0; + .players-mode { + color: @foundryPlayersArrowColor; + } + } + ol { + margin: 4px 0; + .player-name.self { + color: inherit; + font-weight: 700; + } + .player { + color: @bodyFontColor; + } + .player-active { + margin-top: 7px; + &.active { + box-shadow: none; + } + } + } } \ No newline at end of file diff --git a/less/update/components/sidebar-global.less b/less/update/components/sidebar-global.less index 2f69aae7..9c5acbed 100644 --- a/less/update/components/sidebar-global.less +++ b/less/update/components/sidebar-global.less @@ -1,382 +1,382 @@ -#sidebar { - border: none; //1px solid @colorBlue; - &.collapsed { - #sidebar-tabs { - min-height: 370px; - justify-content: center; - & > .item.active { - border: none; - } - } - } -} - -#sidebar-tabs { - border: none; - box-shadow: none; - justify-content: space-between; - .dropShadow1(); - - .item { - font-size: 16px; - } - .item.active { - border: none; - box-shadow: none; - background: none; - text-shadow: none; - } - -} - -/*----------- -** Chat Tab ------------*/ - -#chat-log { - .chat-message { - border: none; - border-radius: 4px; - margin-bottom: 8px; - .dropShadow1(); - & > header { - color: @colorRed; - border-bottom: 2px solid @colorBlue; - margin-bottom: 4px; - span { - color: @colorBlack; - } - } - - } -} -.notification-pip { - color: @colorBlue; -} - -.sw5e.chat-card, -.midi-qol-item-card { - .card-header { - padding: 0; - border: none; - img { - flex: 0 0 36px; - margin-right: 4px; - } - - h3 { - flex: 1; - margin: 0; - line-height: 36px; - .russoOne(17px); - border-bottom: none; - &:hover { - text-shadow: none; - } - } - } - - .card-content { - margin: 4px 0; - - h3 { - font-size: 12px; - margin: 0; - font-weight: bold; - } - - > * { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - } - } - - .card-buttons { - margin: 4px 0; - - span { - display: block; - line-height: 28px; - text-align: center; - } - - button { - .openSans(13px, 700); - padding: 4px 0; - height: auto; - line-height: 1.6; - margin: 4px 0; - border: none; - border-radius: 4px; - &:hover, &:focus { - box-shadow: none; - } - } - } - - .card-footer { - padding: 4px 0 0; - - span { - padding: 0 4px 0 0; - font-size: 10px; - - &:last-child { - border-right: none; - padding-right: 0; - } - } - } -} -.dice-roll { - .dice-formula { - border: none; - box-shadow: none; - border-radius: 4px; - } - .dice-total { - border-radius: 0; - padding: 4px 0; - } -} -#chat-controls { - padding-top: 4px; -} -#chat-form textarea { - &:focus { - box-shadow: none; - outline: none; - } -} - -/*----------- -** Combat Tab ------------*/ -#combat { - h3 { - border: none; - } - - #combat-tracker { - li.combatant { - padding: 4px 0; - background: none; - .token-name { - text-shadow: none; - } - h4 { - color: @colorBlack; - } - .roll { - background: none; - &::before { - content: "\f6cf"; - .fontAwesome(); - font-size: 28px; - } - - } - - - .initiative { - text-shadow: none; - } - - &.hidden { - opacity: 0.5; - } - } - } - #combat-controls { - padding-top: 0; - } - } - -/* -** Folders -*/ -.sidebar-tab { -.directory-header { - margin-bottom: 4px; - .header-search { - position: relative; - i.fa-search { - position: absolute; - left: 8px; - } - input { - text-align: left; - padding-left: 22px; - &:focus { - box-shadow: none; - } - } - } -} -.subdirectory { - border: none; - margin-left: 8px; - min-height: 8px; - -} -.directory-list { - padding-bottom: 4px; - .folder { - & > .folder-header { - line-height: default; - padding: 0 0 0 8px; - position: relative; - border: none; - h3 { - padding: 8px 4px; - .openSans(13px, 700); - line-height: 1.6; - & > i { - margin-right: 4px; - } - } - a { - position: absolute; - top: 0; - right: 4px; - height: 100%; - padding: 0 4px; - i { - margin-top: 12px; - } - - &.create-folder { - right: 28px; - } - } - } - } - .directory-item img { - flex: 0 0 32px; - height: 32px; - width: 32px; - align-self: center; - } - .actor, .item, .journal, .table { - border: none; - .entity-name { - .openSans(13px, 700); - } - - } -} -} -#scenes { - .subdirectory { - border-left: none; - } - .scene { - border: none; - box-shadow: none; - position: relative; - height: 128px; - & + .scene { - margin-top: 4px; - } - &::after { - content: ''; - display: block; - width: 100%; - height: 99px; - position: absolute; - top: 28px; - left: 0; - } - h3 { - .openSans(13px, 700); - text-align: left; - text-shadow: none; - padding: 4px 4px 4px 12px; - line-height: 1.6; - position: absolute; - top: 0; - left: 0; - width: 100%; - } - } -} - -#playlists { - .directory-list { - padding: 0 8px; - li.playlist { - padding: 8px; - border-radius: 4px; - margin-bottom: 8px; - border-top: inherit; - .dropShadow1(); - .playlist-header { - text-decoration: none; - } - li.sound { - border: none; - h4 { - .openSans(13px, 400); - } - - } - } - } - -} -#compendium { - .compendium-entity { - margin: 0 4px; - padding: 8px; - .dropShadow1(); - border-radius: 4px; - border: none; - &+ .compendium-entity { - margin-top: 4px; - } - h3 { - background: none; - border: none; - .russoOne(17px); - padding: 0; - margin-bottom: 4px; - } - ol.compendium-list { - li.compendium-pack { - margin: 0; - padding: 4px; - border: none; - .pack-title { - margin: 0; - position: relative; - a { - .openSans(13px, 700); - i { - display: none; - } - } - .status-icons { - top: 4px; - font-size: 13px; - } - } - - } - } - } -} - -#settings { - h2 { - border: none; - margin: 0 8px; - padding: 0; - background: none; - } - #game-details, #settings-game, #settings-documentation, #settings-access { - padding: 0 8px; - margin: 0 0 8px; - } +#sidebar { + border: none; //1px solid @colorBlue; + &.collapsed { + #sidebar-tabs { + min-height: 370px; + justify-content: center; + & > .item.active { + border: none; + } + } + } +} + +#sidebar-tabs { + border: none; + box-shadow: none; + justify-content: space-between; + .dropShadow1(); + + .item { + font-size: 16px; + } + .item.active { + border: none; + box-shadow: none; + background: none; + text-shadow: none; + } + +} + +/*----------- +** Chat Tab +-----------*/ + +#chat-log { + .chat-message { + border: none; + border-radius: 4px; + margin-bottom: 8px; + .dropShadow1(); + & > header { + color: @colorRed; + border-bottom: 2px solid @colorBlue; + margin-bottom: 4px; + span { + color: @colorBlack; + } + } + + } +} +.notification-pip { + color: @colorBlue; +} + +.sw5e.chat-card, +.midi-qol-item-card { + .card-header { + padding: 0; + border: none; + img { + flex: 0 0 36px; + margin-right: 4px; + } + + h3 { + flex: 1; + margin: 0; + line-height: 36px; + .russoOne(17px); + border-bottom: none; + &:hover { + text-shadow: none; + } + } + } + + .card-content { + margin: 4px 0; + + h3 { + font-size: 12px; + margin: 0; + font-weight: bold; + } + + > * { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + } + } + + .card-buttons { + margin: 4px 0; + + span { + display: block; + line-height: 28px; + text-align: center; + } + + button { + .openSans(13px, 700); + padding: 4px 0; + height: auto; + line-height: 1.6; + margin: 4px 0; + border: none; + border-radius: 4px; + &:hover, &:focus { + box-shadow: none; + } + } + } + + .card-footer { + padding: 4px 0 0; + + span { + padding: 0 4px 0 0; + font-size: 10px; + + &:last-child { + border-right: none; + padding-right: 0; + } + } + } +} +.dice-roll { + .dice-formula { + border: none; + box-shadow: none; + border-radius: 4px; + } + .dice-total { + border-radius: 0; + padding: 4px 0; + } +} +#chat-controls { + padding-top: 4px; +} +#chat-form textarea { + &:focus { + box-shadow: none; + outline: none; + } +} + +/*----------- +** Combat Tab +-----------*/ +#combat { + h3 { + border: none; + } + + #combat-tracker { + li.combatant { + padding: 4px 0; + background: none; + .token-name { + text-shadow: none; + } + h4 { + color: @colorBlack; + } + .roll { + background: none; + &::before { + content: "\f6cf"; + .fontAwesome(); + font-size: 28px; + } + + } + + + .initiative { + text-shadow: none; + } + + &.hidden { + opacity: 0.5; + } + } + } + #combat-controls { + padding-top: 0; + } + } + +/* +** Folders +*/ +.sidebar-tab { +.directory-header { + margin-bottom: 4px; + .header-search { + position: relative; + i.fa-search { + position: absolute; + left: 8px; + } + input { + text-align: left; + padding-left: 22px; + &:focus { + box-shadow: none; + } + } + } +} +.subdirectory { + border: none; + margin-left: 8px; + min-height: 8px; + +} +.directory-list { + padding-bottom: 4px; + .folder { + & > .folder-header { + line-height: default; + padding: 0 0 0 8px; + position: relative; + border: none; + h3 { + padding: 8px 4px; + .openSans(13px, 700); + line-height: 1.6; + & > i { + margin-right: 4px; + } + } + a { + position: absolute; + top: 0; + right: 4px; + height: 100%; + padding: 0 4px; + i { + margin-top: 12px; + } + + &.create-folder { + right: 28px; + } + } + } + } + .directory-item img { + flex: 0 0 32px; + height: 32px; + width: 32px; + align-self: center; + } + .actor, .item, .journal, .table { + border: none; + .entity-name { + .openSans(13px, 700); + } + + } +} +} +#scenes { + .subdirectory { + border-left: none; + } + .scene { + border: none; + box-shadow: none; + position: relative; + height: 128px; + & + .scene { + margin-top: 4px; + } + &::after { + content: ''; + display: block; + width: 100%; + height: 99px; + position: absolute; + top: 28px; + left: 0; + } + h3 { + .openSans(13px, 700); + text-align: left; + text-shadow: none; + padding: 4px 4px 4px 12px; + line-height: 1.6; + position: absolute; + top: 0; + left: 0; + width: 100%; + } + } +} + +#playlists { + .directory-list { + padding: 0 8px; + li.playlist { + padding: 8px; + border-radius: 4px; + margin-bottom: 8px; + border-top: inherit; + .dropShadow1(); + .playlist-header { + text-decoration: none; + } + li.sound { + border: none; + h4 { + .openSans(13px, 400); + } + + } + } + } + +} +#compendium { + .compendium-entity { + margin: 0 4px; + padding: 8px; + .dropShadow1(); + border-radius: 4px; + border: none; + &+ .compendium-entity { + margin-top: 4px; + } + h3 { + background: none; + border: none; + .russoOne(17px); + padding: 0; + margin-bottom: 4px; + } + ol.compendium-list { + li.compendium-pack { + margin: 0; + padding: 4px; + border: none; + .pack-title { + margin: 0; + position: relative; + a { + .openSans(13px, 700); + i { + display: none; + } + } + .status-icons { + top: 4px; + font-size: 13px; + } + } + + } + } + } +} + +#settings { + h2 { + border: none; + margin: 0 8px; + padding: 0; + background: none; + } + #game-details, #settings-game, #settings-documentation, #settings-access { + padding: 0 8px; + margin: 0 0 8px; + } } \ No newline at end of file diff --git a/less/update/components/sidebar-themes.less b/less/update/components/sidebar-themes.less index 02ab20fe..e36d3f35 100644 --- a/less/update/components/sidebar-themes.less +++ b/less/update/components/sidebar-themes.less @@ -1,297 +1,297 @@ -#sidebar-tabs { - background: @sidebarTabBackground; - & > .collapse { - color: @sidebarTabLinkColor; - } - .item.active { - color: @sidebarTabLinkColor; - border-bottom: 3px solid @sidebarTabLinkUnderline; - } -} - -/*----------- -** Chat Tab ------------*/ - -#chat-log { - .chat-message { - background: @chatBackground; - color: @bodyFontColor; - & > header { - color: @chatHeaderColor; - border-bottom: 2px solid @chatHeaderBottomBorderColor; - span { - color: @bodyFontColor; - } - } - - } -} -.notification-pip { - color: @chatNotificationColor; -} - -.sw5e.chat-card, -.midi-qol-item-card { - - .card-header { - h3 { - color: @bodyFontColor; - &:hover { - color: @bodyFontColor; - } - } - } - - - .card-buttons { - span { - border: 1px solid @cardButtonBorder; - } - - } - - .card-footer { - border-top: 1px solid @cardFooterBorder; - - span { - border-right: 1px solid @cardFooterSeparator; - &:last-child { - border-right: none; - } - } - } -} -.dice-roll { - - .dice-formula { - background: @diceFormulaBackground; - color: @diceFormualColor; - box-shadow: none; - border-radius: 4px; - } - -.dice-total { - background: @diceTotalBackground; - border: 1px solid @diceTotalBorder; - box-shadow: 0 0 12px rgba(@diceTotalShadow,.8); - &.success { - color: @diceSuccessColor; - } - &.failure { - color: @diceFailureColor; - } - &.critical { - color: @diceCriticalColor; - background: @diceCriticalBackground; - box-shadow: 0 0 12px rgba(@diceCriticalColor,.5); - } - &.fumble { - color: @diceFumbleColor; - background: @diceFumbleBackground; - box-shadow: 0 0 12px rgba(@diceFumbleColor,.5); - } -} -} -#chat-controls { - .roll-type-select { - background: #4f4f4f; - color: #FFFFFF; - } - label { - color: @bodyFontColor; - } - -} -#chat-form textarea { - background: #4f4f4f; - -} - -/*----------- -** Combat Tab ------------*/ -#combat { -#combat-round { - color: @combatRoundColor; - border-bottom: 2px solid @combatRoundColor; - .encounters { - h4 { - color: @combatRoundColor; - } - a { - color: @linkSecondaryColor; - &:hover { - color: @linkColor; - } - } - } -} - #combat-tracker { - //padding-top: 4px; - li.combatant { - color: @bodyFontColor; - &:nth-child(even) { - background: rgba(@altRowBackground, 0.5); - } - h4 { - color: @bodyFontColor - } - .roll { - color: @linkSecondaryColor; - &:hover { - color: @linkColor; - } - } - .combatant-control { - color: @combatCombatantControlColor; - &.active { - color: @combatCombatantControlColorActive; - } - } - .token-resource { - color: @combatTokenResourceColor; - border-right: 1px solid @combatTokenResouceBorder; - } - &.active { - color: @combatActiveCombatantColor; - .initiative, h4 { - color: @combatActiveCombatantColor; - } - } - &.hidden { - color: @bodyFontColor; - } - } - } - #combat-controls { - border-top: 1px solid @combatControlsBorder; - } -} - -/* -** Folders -*/ -.sidebar-tab { -.directory-header { - .header-search { - i.fa-search { - color: @folderSearchIconColor; - } - input { - background: @inputBackgroundColor; - } - } -} -.subdirectory { - background: @folderSubdirectoryBackground; - .folder { - border-left: 2px solid rgba(@folderSubdirectoryBorder, 0.4); - } -} -.directory-list { - li + li { - border-top: 1px solid @directoryListItemBorder; - } - .folder { - & > .folder-header { - background: @folderHeaderBackground; - h3 { - background: @folderHeaderBackground; - color: @folderHeaderColor; - & > i { - color: @folderIconColor; - } - } - a { - color: @linkSecondaryColor; - &:hover { - color: @linkColor; - } - } - } - &.collapsed > .folder-header { - background: @folderHeaderBackground; - } - & + .entity { - border-top: 1px solid @directoryListItemBorder; - } - } - - .actor, .item, .journal, .table { - background: @entityBackgroundColor; - .entity-name { - color: @entityNameColor; - } - &:nth-child(even) { - background: rgba(@altRowBackground, 0.3); - } - } -} -} -#scenes { - .scene { - border-top: 1px solid @sceneBorderColor; - border-left: 4px solid @sceneBorderColor; - &::after { - box-shadow: 0 0 20px @sceneBorderColor inset; - } - h3 { - background: @sceneBackgroundColor; - } - } -} - -#playlists { - .directory-list { - li.playlist { - background: @playlistBackgroundColor; - .playlist-header { - background: @playlistBackgroundColor; - color: @colorRed; - border-bottom: 2px solid @playlistHeaderBorder; - } - li.sound { - color: @playlistSoundColor; - - } - a.sound-control { - color: @linkColor; - } - } - } - -} -#compendium { - .compendium-entity { - background: @compendiumEntityBackground !important; - h3 { - border-bottom: 2px solid @headerBorderColor; - } - ol.compendium-list { - li.compendium-pack { - &:nth-child(even) { - background: rgba(@altRowBackground, 0.3); - } - .pack-title { - .status-icons { - color: @compendiumStatusIcon; - } - } - footer.compendium-footer { - color: @bodyFontColor; - } - } - } - } -} - -#settings { - h2 { - color: @headingColor; - border-bottom: 2px solid @headerBorderColor; - } - #game-details, #settings-game, #settings-documentation, #settings-access { - color: @bodyFontColor; - } +#sidebar-tabs { + background: @sidebarTabBackground; + & > .collapse { + color: @sidebarTabLinkColor; + } + .item.active { + color: @sidebarTabLinkColor; + border-bottom: 3px solid @sidebarTabLinkUnderline; + } +} + +/*----------- +** Chat Tab +-----------*/ + +#chat-log { + .chat-message { + background: @chatBackground; + color: @bodyFontColor; + & > header { + color: @chatHeaderColor; + border-bottom: 2px solid @chatHeaderBottomBorderColor; + span { + color: @bodyFontColor; + } + } + + } +} +.notification-pip { + color: @chatNotificationColor; +} + +.sw5e.chat-card, +.midi-qol-item-card { + + .card-header { + h3 { + color: @bodyFontColor; + &:hover { + color: @bodyFontColor; + } + } + } + + + .card-buttons { + span { + border: 1px solid @cardButtonBorder; + } + + } + + .card-footer { + border-top: 1px solid @cardFooterBorder; + + span { + border-right: 1px solid @cardFooterSeparator; + &:last-child { + border-right: none; + } + } + } +} +.dice-roll { + + .dice-formula { + background: @diceFormulaBackground; + color: @diceFormualColor; + box-shadow: none; + border-radius: 4px; + } + +.dice-total { + background: @diceTotalBackground; + border: 1px solid @diceTotalBorder; + box-shadow: 0 0 12px rgba(@diceTotalShadow,.8); + &.success { + color: @diceSuccessColor; + } + &.failure { + color: @diceFailureColor; + } + &.critical { + color: @diceCriticalColor; + background: @diceCriticalBackground; + box-shadow: 0 0 12px rgba(@diceCriticalColor,.5); + } + &.fumble { + color: @diceFumbleColor; + background: @diceFumbleBackground; + box-shadow: 0 0 12px rgba(@diceFumbleColor,.5); + } +} +} +#chat-controls { + .roll-type-select { + background: #4f4f4f; + color: #FFFFFF; + } + label { + color: @bodyFontColor; + } + +} +#chat-form textarea { + background: #4f4f4f; + +} + +/*----------- +** Combat Tab +-----------*/ +#combat { +#combat-round { + color: @combatRoundColor; + border-bottom: 2px solid @combatRoundColor; + .encounters { + h4 { + color: @combatRoundColor; + } + a { + color: @linkSecondaryColor; + &:hover { + color: @linkColor; + } + } + } +} + #combat-tracker { + //padding-top: 4px; + li.combatant { + color: @bodyFontColor; + &:nth-child(even) { + background: rgba(@altRowBackground, 0.5); + } + h4 { + color: @bodyFontColor + } + .roll { + color: @linkSecondaryColor; + &:hover { + color: @linkColor; + } + } + .combatant-control { + color: @combatCombatantControlColor; + &.active { + color: @combatCombatantControlColorActive; + } + } + .token-resource { + color: @combatTokenResourceColor; + border-right: 1px solid @combatTokenResouceBorder; + } + &.active { + color: @combatActiveCombatantColor; + .initiative, h4 { + color: @combatActiveCombatantColor; + } + } + &.hidden { + color: @bodyFontColor; + } + } + } + #combat-controls { + border-top: 1px solid @combatControlsBorder; + } +} + +/* +** Folders +*/ +.sidebar-tab { +.directory-header { + .header-search { + i.fa-search { + color: @folderSearchIconColor; + } + input { + background: @inputBackgroundColor; + } + } +} +.subdirectory { + background: @folderSubdirectoryBackground; + .folder { + border-left: 2px solid rgba(@folderSubdirectoryBorder, 0.4); + } +} +.directory-list { + li + li { + border-top: 1px solid @directoryListItemBorder; + } + .folder { + & > .folder-header { + background: @folderHeaderBackground; + h3 { + background: @folderHeaderBackground; + color: @folderHeaderColor; + & > i { + color: @folderIconColor; + } + } + a { + color: @linkSecondaryColor; + &:hover { + color: @linkColor; + } + } + } + &.collapsed > .folder-header { + background: @folderHeaderBackground; + } + & + .entity { + border-top: 1px solid @directoryListItemBorder; + } + } + + .actor, .item, .journal, .table { + background: @entityBackgroundColor; + .entity-name { + color: @entityNameColor; + } + &:nth-child(even) { + background: rgba(@altRowBackground, 0.3); + } + } +} +} +#scenes { + .scene { + border-top: 1px solid @sceneBorderColor; + border-left: 4px solid @sceneBorderColor; + &::after { + box-shadow: 0 0 20px @sceneBorderColor inset; + } + h3 { + background: @sceneBackgroundColor; + } + } +} + +#playlists { + .directory-list { + li.playlist { + background: @playlistBackgroundColor; + .playlist-header { + background: @playlistBackgroundColor; + color: @colorRed; + border-bottom: 2px solid @playlistHeaderBorder; + } + li.sound { + color: @playlistSoundColor; + + } + a.sound-control { + color: @linkColor; + } + } + } + +} +#compendium { + .compendium-entity { + background: @compendiumEntityBackground !important; + h3 { + border-bottom: 2px solid @headerBorderColor; + } + ol.compendium-list { + li.compendium-pack { + &:nth-child(even) { + background: rgba(@altRowBackground, 0.3); + } + .pack-title { + .status-icons { + color: @compendiumStatusIcon; + } + } + footer.compendium-footer { + color: @bodyFontColor; + } + } + } + } +} + +#settings { + h2 { + color: @headingColor; + border-bottom: 2px solid @headerBorderColor; + } + #game-details, #settings-game, #settings-documentation, #settings-access { + color: @bodyFontColor; + } } \ No newline at end of file diff --git a/less/update/components/sidebar.less b/less/update/components/sidebar.less index 67dc2b9b..aa8b2905 100644 --- a/less/update/components/sidebar.less +++ b/less/update/components/sidebar.less @@ -1,500 +1,500 @@ -#sidebar { - border: none; //1px solid @colorBlue; -} - -#sidebar-tabs { - border: none; - box-shadow: none; - background: white; - .dropShadow1(); - & > .collapse { - color: @colorRed; - } - .item { - font-size: 16px; - } - .item.active { - color: @colorRed; - border: none; - border-bottom: 3px solid @colorRed; - box-shadow: none; - background: none; - text-shadow: none; - } -} - -/*----------- -** Chat Tab ------------*/ - -#chat-log { - .chat-message { - background: white; - border: none; - border-radius: 4px; - margin-bottom: 8px; - .dropShadow1(); - & > header { - color: @colorRed; - border-bottom: 2px solid @colorBlue; - margin-bottom: 4px; - span { - color: @colorBlack; - } - } - - } -} -.notification-pip { - color: @colorBlue; - text-shadow: none; - -} - -.sw5e.chat-card, -.midi-qol-item-card { - font-size: 13px; - - .card-header { - padding: 0; - border: none; - - img { - flex: 0 0 36px; - margin-right: 4px; - } - - h3 { - flex: 1; - margin: 0; - line-height: 36px; - .russoOne(17px); - color: @colorBlack; - &:hover { - color: @colorBlack; - text-shadow: none; - } - } - } - - .card-content { - margin: 4px 0; - - h3 { - font-size: 12px; - margin: 0; - font-weight: bold; - } - - > * { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - } - } - - .card-buttons { - margin: 4px 0; - - span { - display: block; - line-height: 28px; - text-align: center; - border: 1px solid @colorLightGray; - } - - button { - .openSans(13px, 700); - padding: 4px 0; - height: auto; - line-height: 1.6; - margin: 4px 0; - background: @colorRed; - border: none; - border-radius: 4px; - &:hover, &:focus { - background-color: lighten(@colorRed, 5); - box-shadow: none; - } - } - } - - .card-footer { - padding: 4px 0 0; - border-top: 1px solid @colorLightBlue; - - span { - border-right: 2px groove #FFF; - padding: 0 4px 0 0; - font-size: 10px; - - &:last-child { - border-right: none; - padding-right: 0; - } - } - } -} -.dice-roll { - -.dice-formula { - background: none; - border: none; -} -.dice-total { - background: @colorPaleBlue; - border: 1px solid @colorBlue; - border-radius: 0; - padding: 4px 0; - box-shadow: 0 0 12px rgba(@colorBlue,.5); - &.success { - color: inherit; - background: #c7d0c0; - border: 1px solid #006c00; - } - &.failure { - color: inherit; - background: #ffdddd; - border: 1px solid #6e0000; - } - &.critical { - color: @colorGreen; - background: @colorPaleGreen; - box-shadow: 0 0 12px rgba(@colorGreen,.5); - } - &.fumble { - color: red; - } -} -} -#chat-controls { - &.roll-type-select { - background: #4f4f4f; - color: #FFFFFF; - } - padding-top: 4px; - label { - color: @colorBlack; - } - -} -#chat-form textarea { - background: #4f4f4f; - &:focus { - box-shadow: none; - outline: none; - } -} - -/*----------- -** Combat Tab ------------*/ -#combat { -#combat-round { - color: @colorRed; - border-bottom: 2px solid @colorBlue; - .encounters { - h4 { - color: @colorRed; - } - a { - color: @colorGray; - &:hover { - color: @colorRed; - } - } - } -} - #combat-tracker { - //padding-top: 4px; - li.combatant { - padding: 4px 0; - color: @colorBlack; - background: none; - &:nth-child(even) { - background: rgba(@colorPaleBlue, 0.5); - } - h4 { - color: @colorBlack; - text-shadow: none; - } - .roll { - background: none; - color: @colorGray; - &::before { - content: "\f6cf"; - .fontAwesome(); - font-size: 28px; - } - &:hover { - color: @colorRed; - } - } - .combatant-control { - color: @colorLightGray; - text-shadow: none; - &.active { - color: @colorDarkGray; - } - } - .token-resource { - color: @colorGray; - border-right: 1px solid @colorLightGray; - } - .initiative { - text-shadow: none; - } - &.active { - color: @colorBlue; - .initiative, h4 { - color: @colorBlue; - } - } - &.hidden { - opacity: 0.5; - color: @colorBlack; - } - } - } - #combat-controls { - padding-top: 0; - border-top: 1px solid @colorBlue; - } -} - -/* -** Folders -*/ -.sidebar-tab { -.directory-header { - margin-bottom: 4px; - .header-search { - position: relative; - i.fa-search { - position: absolute; - left: 8px; - color: @colorBlue; - } - input { - text-align: left; - padding-left: 22px; - background: white; - &:focus { - box-shadow: none; - } - } - } -} -.subdirectory { - border: none; - margin-left: 8px; - background: white; - min-height: 8px; - .folder { - border-left: 2px solid rgba(@colorBlack, 0.4); - } -} -.directory-list { - padding-bottom: 4px; - li + li { - border-top: 1px solid @colorBlue; - } - .folder { - & > .folder-header { - line-height: default; - padding: 0 0 0 8px; - position: relative; - border: none; - background: white; - h3 { - padding: 8px 4px; - background: white; - color: @colorBlack; - .openSans(13px, 700); - line-height: 1.6; - & > i { - margin-right: 4px; - color: @colorBlue; - } - } - a { - position: absolute; - top: 0; - right: 4px; - height: 100%; - padding: 0 4px; - color: @colorLightGray; - &:hover { - color: @colorRed; - } - i { - margin-top: 12px; - } - - &.create-folder { - right: 28px; - } - } - } - &.collapsed > .folder-header { - background: white; - } - & + .entity { - border-top: 1px solid @colorBlue; - } - } - .directory-item img { - flex: 0 0 32px; - height: 32px; - width: 32px; - align-self: center; - } - .actor, .item, .journal, .table { - background: white; - border: none; - .entity-name { - .openSans(13px, 700); - color: @colorBlack; - } - &:nth-child(even) { - background: rgba(@colorPaleBlue, 0.3); - } - } -} -} -#scenes { - .subdirectory { - border-left: none; - } - .scene { - border: none; - border-top: 1px solid @colorBlue; - border-left: 4px solid @colorBlue; - box-shadow: none; - position: relative; - height: 128px; - //margin-bottom: 4px; - & + .scene { - margin-top: 4px; - } - &::after { - content: ''; - display: block; - width: 100%; - height: 99px; - position: absolute; - top: 28px; - left: 0; - box-shadow: 0 0 20px @colorBlue inset; - } - h3 { - .openSans(13px, 700); - text-align: left; - text-shadow: none; - padding: 4px 4px 4px 12px; - background: white; - line-height: 1.6; - position: absolute; - top: 0; - left: 0; - width: 100%; - } - } -} - -#playlists { - .directory-list { - padding: 0 8px; - li.playlist { - padding: 8px; - border-radius: 4px; - background: white; - margin-bottom: 8px; - border-top: inherit; - .dropShadow1(); - .playlist-header { - background: white; - color: @colorRed; - text-decoration: none; - border-bottom: 2px solid @colorBlue; - } - li.sound { - border: none; - color: @colorBlack; - h4 { - .openSans(13px, 400); - } - - } - a.sound-control { - color: @colorRed; - } - } - } - -} -#compendium { - .compendium-entity { - margin: 0 4px; - padding: 8px; - background: white !important; - .dropShadow1(); - border-radius: 4px; - border: none; - &+ .compendium-entity { - margin-top: 4px; - } - h3 { - border: none; - color: @colorRed; - border-bottom: 2px solid @colorBlue; - .russoOne(17px); - padding: 0; - margin-bottom: 4px; - } - ol.compendium-list { - li.compendium-pack { - margin: 0; - padding: 4px; - border: none; - &:nth-child(even) { - background: rgba(@colorPaleBlue, 0.3); - } - .pack-title { - margin: 0; - position: relative; - a { - .openSans(13px, 700); - i { - display: none; - } - } - .status-icons { - top: 4px; - color: @colorLightGray; - font-size: 13px; - } - } - footer.compendium-footer { - color: @colorBlack; - } - } - } - } -} - -#settings { - h2 { - color: @colorRed; - border: none; - border-bottom: 2px solid @colorBlue; - margin: 0 8px; - padding: 0; - } - #game-details, #settings-game, #settings-documentation, #settings-access { - padding: 0 8px; - margin: 0 0 8px; - color: @colorBlack; - } +#sidebar { + border: none; //1px solid @colorBlue; +} + +#sidebar-tabs { + border: none; + box-shadow: none; + background: white; + .dropShadow1(); + & > .collapse { + color: @colorRed; + } + .item { + font-size: 16px; + } + .item.active { + color: @colorRed; + border: none; + border-bottom: 3px solid @colorRed; + box-shadow: none; + background: none; + text-shadow: none; + } +} + +/*----------- +** Chat Tab +-----------*/ + +#chat-log { + .chat-message { + background: white; + border: none; + border-radius: 4px; + margin-bottom: 8px; + .dropShadow1(); + & > header { + color: @colorRed; + border-bottom: 2px solid @colorBlue; + margin-bottom: 4px; + span { + color: @colorBlack; + } + } + + } +} +.notification-pip { + color: @colorBlue; + text-shadow: none; + +} + +.sw5e.chat-card, +.midi-qol-item-card { + font-size: 13px; + + .card-header { + padding: 0; + border: none; + + img { + flex: 0 0 36px; + margin-right: 4px; + } + + h3 { + flex: 1; + margin: 0; + line-height: 36px; + .russoOne(17px); + color: @colorBlack; + &:hover { + color: @colorBlack; + text-shadow: none; + } + } + } + + .card-content { + margin: 4px 0; + + h3 { + font-size: 12px; + margin: 0; + font-weight: bold; + } + + > * { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; + } + } + + .card-buttons { + margin: 4px 0; + + span { + display: block; + line-height: 28px; + text-align: center; + border: 1px solid @colorLightGray; + } + + button { + .openSans(13px, 700); + padding: 4px 0; + height: auto; + line-height: 1.6; + margin: 4px 0; + background: @colorRed; + border: none; + border-radius: 4px; + &:hover, &:focus { + background-color: lighten(@colorRed, 5); + box-shadow: none; + } + } + } + + .card-footer { + padding: 4px 0 0; + border-top: 1px solid @colorLightBlue; + + span { + border-right: 2px groove #FFF; + padding: 0 4px 0 0; + font-size: 10px; + + &:last-child { + border-right: none; + padding-right: 0; + } + } + } +} +.dice-roll { + +.dice-formula { + background: none; + border: none; +} +.dice-total { + background: @colorPaleBlue; + border: 1px solid @colorBlue; + border-radius: 0; + padding: 4px 0; + box-shadow: 0 0 12px rgba(@colorBlue,.5); + &.success { + color: inherit; + background: #c7d0c0; + border: 1px solid #006c00; + } + &.failure { + color: inherit; + background: #ffdddd; + border: 1px solid #6e0000; + } + &.critical { + color: @colorGreen; + background: @colorPaleGreen; + box-shadow: 0 0 12px rgba(@colorGreen,.5); + } + &.fumble { + color: red; + } +} +} +#chat-controls { + &.roll-type-select { + background: #4f4f4f; + color: #FFFFFF; + } + padding-top: 4px; + label { + color: @colorBlack; + } + +} +#chat-form textarea { + background: #4f4f4f; + &:focus { + box-shadow: none; + outline: none; + } +} + +/*----------- +** Combat Tab +-----------*/ +#combat { +#combat-round { + color: @colorRed; + border-bottom: 2px solid @colorBlue; + .encounters { + h4 { + color: @colorRed; + } + a { + color: @colorGray; + &:hover { + color: @colorRed; + } + } + } +} + #combat-tracker { + //padding-top: 4px; + li.combatant { + padding: 4px 0; + color: @colorBlack; + background: none; + &:nth-child(even) { + background: rgba(@colorPaleBlue, 0.5); + } + h4 { + color: @colorBlack; + text-shadow: none; + } + .roll { + background: none; + color: @colorGray; + &::before { + content: "\f6cf"; + .fontAwesome(); + font-size: 28px; + } + &:hover { + color: @colorRed; + } + } + .combatant-control { + color: @colorLightGray; + text-shadow: none; + &.active { + color: @colorDarkGray; + } + } + .token-resource { + color: @colorGray; + border-right: 1px solid @colorLightGray; + } + .initiative { + text-shadow: none; + } + &.active { + color: @colorBlue; + .initiative, h4 { + color: @colorBlue; + } + } + &.hidden { + opacity: 0.5; + color: @colorBlack; + } + } + } + #combat-controls { + padding-top: 0; + border-top: 1px solid @colorBlue; + } +} + +/* +** Folders +*/ +.sidebar-tab { +.directory-header { + margin-bottom: 4px; + .header-search { + position: relative; + i.fa-search { + position: absolute; + left: 8px; + color: @colorBlue; + } + input { + text-align: left; + padding-left: 22px; + background: white; + &:focus { + box-shadow: none; + } + } + } +} +.subdirectory { + border: none; + margin-left: 8px; + background: white; + min-height: 8px; + .folder { + border-left: 2px solid rgba(@colorBlack, 0.4); + } +} +.directory-list { + padding-bottom: 4px; + li + li { + border-top: 1px solid @colorBlue; + } + .folder { + & > .folder-header { + line-height: default; + padding: 0 0 0 8px; + position: relative; + border: none; + background: white; + h3 { + padding: 8px 4px; + background: white; + color: @colorBlack; + .openSans(13px, 700); + line-height: 1.6; + & > i { + margin-right: 4px; + color: @colorBlue; + } + } + a { + position: absolute; + top: 0; + right: 4px; + height: 100%; + padding: 0 4px; + color: @colorLightGray; + &:hover { + color: @colorRed; + } + i { + margin-top: 12px; + } + + &.create-folder { + right: 28px; + } + } + } + &.collapsed > .folder-header { + background: white; + } + & + .entity { + border-top: 1px solid @colorBlue; + } + } + .directory-item img { + flex: 0 0 32px; + height: 32px; + width: 32px; + align-self: center; + } + .actor, .item, .journal, .table { + background: white; + border: none; + .entity-name { + .openSans(13px, 700); + color: @colorBlack; + } + &:nth-child(even) { + background: rgba(@colorPaleBlue, 0.3); + } + } +} +} +#scenes { + .subdirectory { + border-left: none; + } + .scene { + border: none; + border-top: 1px solid @colorBlue; + border-left: 4px solid @colorBlue; + box-shadow: none; + position: relative; + height: 128px; + //margin-bottom: 4px; + & + .scene { + margin-top: 4px; + } + &::after { + content: ''; + display: block; + width: 100%; + height: 99px; + position: absolute; + top: 28px; + left: 0; + box-shadow: 0 0 20px @colorBlue inset; + } + h3 { + .openSans(13px, 700); + text-align: left; + text-shadow: none; + padding: 4px 4px 4px 12px; + background: white; + line-height: 1.6; + position: absolute; + top: 0; + left: 0; + width: 100%; + } + } +} + +#playlists { + .directory-list { + padding: 0 8px; + li.playlist { + padding: 8px; + border-radius: 4px; + background: white; + margin-bottom: 8px; + border-top: inherit; + .dropShadow1(); + .playlist-header { + background: white; + color: @colorRed; + text-decoration: none; + border-bottom: 2px solid @colorBlue; + } + li.sound { + border: none; + color: @colorBlack; + h4 { + .openSans(13px, 400); + } + + } + a.sound-control { + color: @colorRed; + } + } + } + +} +#compendium { + .compendium-entity { + margin: 0 4px; + padding: 8px; + background: white !important; + .dropShadow1(); + border-radius: 4px; + border: none; + &+ .compendium-entity { + margin-top: 4px; + } + h3 { + border: none; + color: @colorRed; + border-bottom: 2px solid @colorBlue; + .russoOne(17px); + padding: 0; + margin-bottom: 4px; + } + ol.compendium-list { + li.compendium-pack { + margin: 0; + padding: 4px; + border: none; + &:nth-child(even) { + background: rgba(@colorPaleBlue, 0.3); + } + .pack-title { + margin: 0; + position: relative; + a { + .openSans(13px, 700); + i { + display: none; + } + } + .status-icons { + top: 4px; + color: @colorLightGray; + font-size: 13px; + } + } + footer.compendium-footer { + color: @colorBlack; + } + } + } + } +} + +#settings { + h2 { + color: @colorRed; + border: none; + border-bottom: 2px solid @colorBlue; + margin: 0 8px; + padding: 0; + } + #game-details, #settings-game, #settings-documentation, #settings-access { + padding: 0 8px; + margin: 0 0 8px; + color: @colorBlack; + } } \ No newline at end of file diff --git a/less/update/sw5e-dark.less b/less/update/sw5e-dark.less index aef08059..18bd9af7 100644 --- a/less/update/sw5e-dark.less +++ b/less/update/sw5e-dark.less @@ -1,47 +1,47 @@ -@import "_variables.less"; -@import "_variables-dark.less"; - -body.dark-theme { - .app { - background: @primaryBackground; - } - h1, - h2, - h3, - h4, - h5, - h6 { - color: @headingColor; - } - h3 { - border-bottom: 2px solid @headerBorderColor; - } - - a { - color: @linkColor; - text-decoration: none; - - &:hover, - &:active { - text-shadow: none; - text-decoration: underline; - } - } - - blockquote { - padding: 4px 8px; - background-color: @blockquoteBackground; - border: 1px solid @blockquoteBorder; - box-shadow: @blockquoteShadow; - } - - hr { - border-width: 0 0 1px 0; - border-bottom: 1px solid @hrColor; - } - @import "components/forms-themes.less"; - @import "components/sidebar-themes.less"; - @import "components/foundry-nav-themes.less"; - @import "components/foundry-app-window-themes.less"; - @import "components/actor-themes.less"; +@import "_variables.less"; +@import "_variables-dark.less"; + +body.dark-theme { + .app { + background: @primaryBackground; + } + h1, + h2, + h3, + h4, + h5, + h6 { + color: @headingColor; + } + h3 { + border-bottom: 2px solid @headerBorderColor; + } + + a { + color: @linkColor; + text-decoration: none; + + &:hover, + &:active { + text-shadow: none; + text-decoration: underline; + } + } + + blockquote { + padding: 4px 8px; + background-color: @blockquoteBackground; + border: 1px solid @blockquoteBorder; + box-shadow: @blockquoteShadow; + } + + hr { + border-width: 0 0 1px 0; + border-bottom: 1px solid @hrColor; + } + @import "components/forms-themes.less"; + @import "components/sidebar-themes.less"; + @import "components/foundry-nav-themes.less"; + @import "components/foundry-app-window-themes.less"; + @import "components/actor-themes.less"; } \ No newline at end of file diff --git a/less/update/sw5e-global.less b/less/update/sw5e-global.less index 66173163..d1fcd618 100644 --- a/less/update/sw5e-global.less +++ b/less/update/sw5e-global.less @@ -1,194 +1,194 @@ -/* open-sans-regular - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - src: url('./fonts/OpenSans-Regular.ttf'); -} -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400; - src: url('./fonts/OpenSans-Italic.ttf'); -} -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 700; - src: url('./fonts/OpenSans-Bold.ttf'); -} -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 700; - src: url('./fonts/OpenSans-BoldItalic.ttf'); -} -/* russo-one-regular - latin */ -@font-face { - font-family: 'Russo One'; - font-style: normal; - font-weight: 400; - src: url('./fonts/RussoOne.ttf'); -} -@font-face { - font-family: 'Russo One'; - font-style: italic; - font-weight: 400; - src: url('./fonts/RussoOne.ttf'); -} -@font-face { - font-family: 'Russo One'; - font-style: normal; - font-weight: 700; - src: url('./fonts/RussoOne.ttf'); -} -@font-face { - font-family: 'Aurebesh'; - font-style: normal; - font-weight: 400; - src: url('./fonts/Aurebesh.ttf'); -} -@font-face { - font-family: 'Engli-Besh'; - font-style: normal; - font-weight: 400; - src: url('./fonts/EngliBesh-KG3W.ttf'); -} -@import "_variables.less"; - -html { - box-sizing: border-box; -} -*, *:before, *:after { - box-sizing: inherit; -} -// ::-webkit-scrollbar { -// width: 6px; -// height: 6px; -// } -::-webkit-scrollbar-track { - border: 1px solid @colorBlue; - border-radius: 4px; -} -::-webkit-scrollbar-thumb { - outline: none; - border-radius: 4px; - background: @colorBlue; - border: none; -} -:root { - scrollbar-width: thin; - scrollbar-color: @colorBlue @colorPaleBlue; -} - -body { - .openSans(13px, 400); - background-image: url('./ui/SW5e-logo.svg'); - background-repeat: no-repeat; - background-size: cover; -} - -h1 { - .russoOne(34px); -} -h2 { - .russoOne(27px); -} -h3 { - .russoOne(21px); -} -h4 { - .russoOne(17px); -} -h5, h6 { - .russoOne(13px); -} - -a { - text-decoration: none; - &:hover, &:active { - text-shadow: none; - text-decoration: underline; - } -} - -.app { - border: none;// 1px solid @colorBlue; - .dropShadow1(); -} -#pause { - img {display: none;} - background: none; - height: 128px; - &::before { - content: ''; - position: absolute; - top: 0; - margin-left: -64px; - left: 50%; - width: 128px; - height: 128px; - background: url("ui/pause-inner.svg") no-repeat 50% 50%; - animation-name: pause-spin; - animation-duration: 10000ms; - animation-iteration-count: infinite; - animation-timing-function: linear; - } - &::after { - content: ''; - position: absolute; - top: 0; - margin-left: -64px; - left: 50%; - width: 128px; - height: 128px; - background: url("ui/pause-outer.svg") no-repeat 50% 50%; - animation-name: pause-spin; - animation-duration: 5000ms; - animation-iteration-count: infinite; - animation-timing-function: linear; - animation-direction: reverse; - } - h3 { - border-bottom: 0; - line-height: 1; - position: absolute; - top: 50%; - left: 50%; - width: 256px; - margin-left: -128px; - margin-top: -13px; - text-shadow: 0 0 24px @colorBlue; - &::before, &::after { - position: absolute; - font-family: "Aurebesh", sans-serif; - font-size: 13px; - color: @colorGray; - animation: none; - opacity: 0.8; - text-shadow: 0 0 8px @colorBlue; - } - &::before { - content: "GAME"; - top: -13px; - left: 42px; - } - &::after { - content: "PAUSED"; - bottom: -13px; - right: 42px; - } - } -} -@import "components/forms-global.less"; -@import "components/sidebar-global.less"; -@import "components/actor-global.less"; - -@keyframes pause-spin { - from { - transform:rotate(0deg); - } - to { - transform: rotate(360deg); - } +/* open-sans-regular - latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: url('./fonts/OpenSans-Regular.ttf'); +} +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: url('./fonts/OpenSans-Italic.ttf'); +} +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: url('./fonts/OpenSans-Bold.ttf'); +} +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: url('./fonts/OpenSans-BoldItalic.ttf'); +} +/* russo-one-regular - latin */ +@font-face { + font-family: 'Russo One'; + font-style: normal; + font-weight: 400; + src: url('./fonts/RussoOne.ttf'); +} +@font-face { + font-family: 'Russo One'; + font-style: italic; + font-weight: 400; + src: url('./fonts/RussoOne.ttf'); +} +@font-face { + font-family: 'Russo One'; + font-style: normal; + font-weight: 700; + src: url('./fonts/RussoOne.ttf'); +} +@font-face { + font-family: 'Aurebesh'; + font-style: normal; + font-weight: 400; + src: url('./fonts/Aurebesh.ttf'); +} +@font-face { + font-family: 'Engli-Besh'; + font-style: normal; + font-weight: 400; + src: url('./fonts/EngliBesh-KG3W.ttf'); +} +@import "_variables.less"; + +html { + box-sizing: border-box; +} +*, *:before, *:after { + box-sizing: inherit; +} +// ::-webkit-scrollbar { +// width: 6px; +// height: 6px; +// } +::-webkit-scrollbar-track { + border: 1px solid @colorBlue; + border-radius: 4px; +} +::-webkit-scrollbar-thumb { + outline: none; + border-radius: 4px; + background: @colorBlue; + border: none; +} +:root { + scrollbar-width: thin; + scrollbar-color: @colorBlue @colorPaleBlue; +} + +body { + .openSans(13px, 400); + background-image: url('./ui/SW5e-logo.svg'); + background-repeat: no-repeat; + background-size: cover; +} + +h1 { + .russoOne(34px); +} +h2 { + .russoOne(27px); +} +h3 { + .russoOne(21px); +} +h4 { + .russoOne(17px); +} +h5, h6 { + .russoOne(13px); +} + +a { + text-decoration: none; + &:hover, &:active { + text-shadow: none; + text-decoration: underline; + } +} + +.app { + border: none;// 1px solid @colorBlue; + .dropShadow1(); +} +#pause { + img {display: none;} + background: none; + height: 128px; + &::before { + content: ''; + position: absolute; + top: 0; + margin-left: -64px; + left: 50%; + width: 128px; + height: 128px; + background: url("ui/pause-inner.svg") no-repeat 50% 50%; + animation-name: pause-spin; + animation-duration: 10000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; + } + &::after { + content: ''; + position: absolute; + top: 0; + margin-left: -64px; + left: 50%; + width: 128px; + height: 128px; + background: url("ui/pause-outer.svg") no-repeat 50% 50%; + animation-name: pause-spin; + animation-duration: 5000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; + animation-direction: reverse; + } + h3 { + border-bottom: 0; + line-height: 1; + position: absolute; + top: 50%; + left: 50%; + width: 256px; + margin-left: -128px; + margin-top: -13px; + text-shadow: 0 0 24px @colorBlue; + &::before, &::after { + position: absolute; + font-family: "Aurebesh", sans-serif; + font-size: 13px; + color: @colorGray; + animation: none; + opacity: 0.8; + text-shadow: 0 0 8px @colorBlue; + } + &::before { + content: "GAME"; + top: -13px; + left: 42px; + } + &::after { + content: "PAUSED"; + bottom: -13px; + right: 42px; + } + } +} +@import "components/forms-global.less"; +@import "components/sidebar-global.less"; +@import "components/actor-global.less"; + +@keyframes pause-spin { + from { + transform:rotate(0deg); + } + to { + transform: rotate(360deg); + } } \ No newline at end of file diff --git a/less/update/sw5e-light.less b/less/update/sw5e-light.less index 7e36b236..0f898c80 100644 --- a/less/update/sw5e-light.less +++ b/less/update/sw5e-light.less @@ -1,47 +1,47 @@ -@import "_variables.less"; -@import "_variables-light.less"; - -body.light-theme { - .app { - background: @primaryBackground; - } - h1, - h2, - h3, - h4, - h5, - h6 { - color: @headingColor; - } - h3 { - border-bottom: 2px solid @headerBorderColor; - } - - a { - color: @linkColor; - text-decoration: none; - - &:hover, - &:active { - text-shadow: none; - text-decoration: underline; - } - } - - blockquote { - padding: 4px 8px; - background-color: @blockquoteBackground; - border: 1px solid @blockquoteBorder; - box-shadow: @blockquoteShadow; - } - - hr { - border-width: 0 0 1px 0; - border-bottom: 1px solid @hrColor; - } - @import "components/forms-themes.less"; - @import "components/sidebar-themes.less"; - @import "components/foundry-nav-themes.less"; - @import "components/foundry-app-window-themes.less"; - @import "components/actor-themes.less"; +@import "_variables.less"; +@import "_variables-light.less"; + +body.light-theme { + .app { + background: @primaryBackground; + } + h1, + h2, + h3, + h4, + h5, + h6 { + color: @headingColor; + } + h3 { + border-bottom: 2px solid @headerBorderColor; + } + + a { + color: @linkColor; + text-decoration: none; + + &:hover, + &:active { + text-shadow: none; + text-decoration: underline; + } + } + + blockquote { + padding: 4px 8px; + background-color: @blockquoteBackground; + border: 1px solid @blockquoteBorder; + box-shadow: @blockquoteShadow; + } + + hr { + border-width: 0 0 1px 0; + border-bottom: 1px solid @hrColor; + } + @import "components/forms-themes.less"; + @import "components/sidebar-themes.less"; + @import "components/foundry-nav-themes.less"; + @import "components/foundry-app-window-themes.less"; + @import "components/actor-themes.less"; } \ No newline at end of file diff --git a/less/update/sw5e-update.less b/less/update/sw5e-update.less index 15b7badd..77d6d480 100644 --- a/less/update/sw5e-update.less +++ b/less/update/sw5e-update.less @@ -1,61 +1,61 @@ -@import "variables.less"; - - - -a { - color: @colorRed; - text-decoration: none; - &:hover, &:active { - text-shadow: none; - text-decoration: underline; - } -} - -.app { - background: @sheetBackground; - border: none;// 1px solid @colorBlue; - .dropShadow1(); -} - -#context-menu { - background: none; - border: none; - border-radius: 0; - color: @colorBlack; - padding: 0 8px; - ol.context-items { - background: white; - border-radius: 4px; - border: 1px solid @colorLightGray; - .dropShadow2(); - li.context-item { - &:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } - &:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - } - i { - color: @colorBlue; - } - &:hover { - background: @colorRed; - color: white; - text-shadow: none; - cursor: pointer; - i { - color: white; - } - } - & + li { - border-top: 1px solid @colorPaleGray; - } - } - } - - -} -@import "components/forms.less"; +@import "variables.less"; + + + +a { + color: @colorRed; + text-decoration: none; + &:hover, &:active { + text-shadow: none; + text-decoration: underline; + } +} + +.app { + background: @sheetBackground; + border: none;// 1px solid @colorBlue; + .dropShadow1(); +} + +#context-menu { + background: none; + border: none; + border-radius: 0; + color: @colorBlack; + padding: 0 8px; + ol.context-items { + background: white; + border-radius: 4px; + border: 1px solid @colorLightGray; + .dropShadow2(); + li.context-item { + &:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } + &:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + } + i { + color: @colorBlue; + } + &:hover { + background: @colorRed; + color: white; + text-shadow: none; + cursor: pointer; + i { + color: white; + } + } + & + li { + border-top: 1px solid @colorPaleGray; + } + } + } + + +} +@import "components/forms.less"; @import "components/sidebar.less"; \ No newline at end of file diff --git a/module/actor/entity.js b/module/actor/entity.js index a25fd738..127a0d05 100644 --- a/module/actor/entity.js +++ b/module/actor/entity.js @@ -458,8 +458,8 @@ export default class Actor5e extends Actor { return weight + (q * w); }, 0); - // [Optional] add Currency Weight - if ( game.settings.get("sw5e", "currencyWeight") ) { + // [Optional] add Currency Weight (for non-transformed actors) + if ( game.settings.get("sw5e", "currencyWeight") && actorData.data.currency ) { const currency = actorData.data.currency; const numCoins = Object.values(currency).reduce((val, denom) => val += Math.max(denom, 0), 0); weight += numCoins / CONFIG.SW5E.encumbrance.currencyPerWeight; @@ -553,43 +553,56 @@ export default class Actor5e extends Actor { const isNPC = this.data.type === 'npc'; let initial = {}; switch ( itemData.type ) { + case "weapon": - initial["data.equipped"] = isNPC; // NPCs automatically equip weapons - let hasWeaponProf = isNPC; // NPCs automatically have weapon proficiency - if ( !isNPC ) { - const weaponProf = { - "natural": true, - "simpleVW": "sim", - "simpleB": "sim", - "simpleLW": "sim", - "martialVW": "mar", - "martialB": "mar", - "martialLW": "mar" - }[itemData.data?.weaponType]; - const actorWeaponProfs = this.data.data.traits?.weaponProf?.value || []; - hasWeaponProf = (weaponProf === true) || actorWeaponProfs.includes(weaponProf); + if ( getProperty(itemData, "data.equipped") === undefined ) { + initial["data.equipped"] = isNPC; // NPCs automatically equip weapons + } + if ( getProperty(itemData, "data.proficient") === undefined ) { + if ( isNPC ) { + initial["data.proficient"] = true; // NPCs automatically have equipment proficiency + } else { + const weaponProf = { + "natural": true, + "simpleVW": "sim", + "simpleB": "sim", + "simpleLW": "sim", + "martialVW": "mar", + "martialB": "mar", + "martialLW": "mar" + }[itemData.data?.weaponType]; // Player characters check proficiency + const actorWeaponProfs = this.data.data.traits?.weaponProf?.value || []; + const hasWeaponProf = (weaponProf === true) || actorWeaponProfs.includes(weaponProf); + initial["data.proficient"] = hasWeaponProf; + } } - initial["data.proficient"] = hasWeaponProf; break; + case "equipment": - initial["data.equipped"] = isNPC; // NPCs automatically equip equipment - let hasEquipmentProf = isNPC; // NPCs automatically have equipment proficiency - if ( !isNPC ) { - const armorProf = { - "natural": true, - "clothing": true, - "light": "lgt", - "medium": "med", - "heavy": "hvy", - "shield": "shl" - }[itemData.data?.armor?.type]; - const actorArmorProfs = this.data.data.traits?.armorProf?.value || []; - hasEquipmentProf = (armorProf === true) || actorArmorProfs.includes(armorProf); + if ( getProperty(itemData, "data.equipped") === undefined ) { + initial["data.equipped"] = isNPC; // NPCs automatically equip equipment + } + if ( getProperty(itemData, "data.proficient") === undefined ) { + if ( isNPC ) { + initial["data.proficient"] = true; // NPCs automatically have equipment proficiency + } else { + const armorProf = { + "natural": true, + "clothing": true, + "light": "lgt", + "medium": "med", + "heavy": "hvy", + "shield": "shl" + }[itemData.data?.armor?.type]; // Player characters check proficiency + const actorArmorProfs = this.data.data.traits?.armorProf?.value || []; + const hasEquipmentProf = (armorProf === true) || actorArmorProfs.includes(armorProf); + initial["data.proficient"] = hasEquipmentProf; + } } - initial["data.proficient"] = hasEquipmentProf; break; + case "power": - initial["data.prepared"] = true; // NPCs automatically prepare powers + initial["data.prepared"] = true; // automatically prepare powers for everyone break; } mergeObject(itemData, initial); @@ -1103,7 +1116,7 @@ export default class Actor5e extends Actor { // Recover power slots for ( let [k, v] of Object.entries(data.powers) ) { - updateData[`data.powers.${k}.value`] = !Number.isNaN(v.override) ? v.override : (v.max ?? 0); + updateData[`data.powers.${k}.value`] = Number.isNumeric(v.override) ? v.override : (v.max ?? 0); } // Recover pact slots. @@ -1210,10 +1223,10 @@ export default class Actor5e extends Actor { } // Get the original Actor data and the new source data - const o = this.toJSON(); + const o = duplicate(this.toJSON()); o.flags.sw5e = o.flags.sw5e || {}; o.flags.sw5e.transformOptions = {mergeSkills, mergeSaves}; - const source = target.toJSON(); + const source = duplicate(target.toJSON()); // Prepare new data to merge from the source const d = { @@ -1244,7 +1257,7 @@ export default class Actor5e extends Actor { // Handle wildcard if ( source.token.randomImg ) { const images = await target.getTokenImages(); - d.token.img = images[0]; + d.token.img = images[Math.floor(Math.random() * images.length)]; } // Keep Token configurations @@ -1328,7 +1341,7 @@ export default class Actor5e extends Actor { newTokenData.actorId = newActor.id; return newTokenData; }); - return canvas.scene.updateEmbeddedEntity("Token", updates); + return canvas.scene?.updateEmbeddedEntity("Token", updates); } /* -------------------------------------------- */ diff --git a/module/actor/sheets/newSheet/base.js b/module/actor/sheets/newSheet/base.js index 4638cd21..475f5a6d 100644 --- a/module/actor/sheets/newSheet/base.js +++ b/module/actor/sheets/newSheet/base.js @@ -33,10 +33,10 @@ export default class ActorSheet5e extends ActorSheet { static get defaultOptions() { return mergeObject(super.defaultOptions, { scrollY: [ - ".inventory .inventory-list", - ".features .inventory-list", - ".powerbook .inventory-list", - ".effects .inventory-list" + ".inventory .group-list", + ".features .group-list", + ".powerbook .group-list", + ".effects .effects-list" ], tabs: [{navSelector: ".tabs", contentSelector: ".sheet-body", initial: "description"}] }); @@ -619,6 +619,11 @@ export default class ActorSheet5e extends ActorSheet { itemData = scroll.data; } + // Ignore certain statuses + if ( itemData.data ) { + ["attunement", "equipped", "proficient", "prepared"].forEach(k => delete itemData.data[k]); + } + // Create the owned item as normal return super._onDropItemCreate(itemData); } diff --git a/module/actor/sheets/oldSheets/base.js b/module/actor/sheets/oldSheets/base.js index 485a78b7..c97dd95a 100644 --- a/module/actor/sheets/oldSheets/base.js +++ b/module/actor/sheets/oldSheets/base.js @@ -619,6 +619,11 @@ export default class ActorSheet5e extends ActorSheet { itemData = scroll.data; } + // Ignore certain statuses + if ( itemData.data ) { + ["attunement", "equipped", "proficient", "prepared"].forEach(k => delete itemData.data[k]); + } + // Create the owned item as normal return super._onDropItemCreate(itemData); } diff --git a/module/apps/ability-use-dialog.js b/module/apps/ability-use-dialog.js index a0f8b716..cc277f9b 100644 --- a/module/apps/ability-use-dialog.js +++ b/module/apps/ability-use-dialog.js @@ -168,6 +168,8 @@ export default class AbilityUseDialog extends Dialog { type: item.data.consumableType, value: uses.value, quantity: item.data.quantity, + max: uses.max, + per: CONFIG.SW5E.limitedUsePeriods[uses.per] }); } diff --git a/module/characterImporter.js b/module/characterImporter.js new file mode 100644 index 00000000..e5af2c18 --- /dev/null +++ b/module/characterImporter.js @@ -0,0 +1,121 @@ +export default class CharacterImporter { + + // transform JSON from sw5e.com to Foundry friendly format + // and insert new actor + static async transform(rawCharacter){ + const sourceCharacter = JSON.parse(rawCharacter); //source character + + const details = { + species: sourceCharacter.attribs.find(e => e.name == "race").current, + background: sourceCharacter.attribs.find(e => e.name == "background").current, + alignment: sourceCharacter.attribs.find(e => e.name == "alignment").current + } + + const hp = { + value: sourceCharacter.attribs.find(e => e.name == "hp").current, + min: 0, + max: sourceCharacter.attribs.find(e => e.name == "hp").current, + temp: sourceCharacter.attribs.find(e => e.name == "hp_temp").current + }; + + const ac = { + value: sourceCharacter.attribs.find(e => e.name == "ac").current + }; + + const abilities = { + str: { + value: sourceCharacter.attribs.find(e => e.name == "strength").current, + proficient: sourceCharacter.attribs.find(e => e.name == 'strength_save_prof').current ? 1 : 0 + }, + dex: { + value: sourceCharacter.attribs.find(e => e.name == "dexterity").current, + proficient: sourceCharacter.attribs.find(e => e.name == 'dexterity_save_prof').current ? 1 : 0 + }, + con: { + value: sourceCharacter.attribs.find(e => e.name == "constitution").current, + proficient: sourceCharacter.attribs.find(e => e.name == 'constitution_save_prof').current ? 1 : 0 + }, + int: { + value: sourceCharacter.attribs.find(e => e.name == "intelligence").current, + proficient: sourceCharacter.attribs.find(e => e.name == 'intelligence_save_prof').current ? 1 : 0 + }, + wis: { + value: sourceCharacter.attribs.find(e => e.name == "wisdom").current, + proficient: sourceCharacter.attribs.find(e => e.name == 'wisdom_save_prof').current ? 1 : 0 + }, + cha: { + value: sourceCharacter.attribs.find(e => e.name == "charisma").current, + proficient: sourceCharacter.attribs.find(e => e.name == 'charisma_save_prof').current ? 1 : 0 + }, + }; + + const targetCharacter = { + name: sourceCharacter.name, + type: "character", + data: { + abilities: abilities, + details: details, + attributes: { + ac: ac, + hp: hp + } + } + }; + + let actor = await Actor.create(targetCharacter); + + const profession = sourceCharacter.attribs.find(e => e.name == "class").current; + let professionLevel = sourceCharacter.attribs.find(e => e.name == "class_display").current; + professionLevel = parseInt( professionLevel.replace(/[^0-9]/g,'') ); //remove a-z, leaving only integers + CharacterImporter.addClasses(profession, professionLevel, actor); + } + + static async addClasses(profession, level, actor){ + let classes = await game.packs.get('sw5e.classes').getContent(); + let assignedClass = classes.find( c => c.name === profession ); + assignedClass.data.data.levels = level; + await actor.createEmbeddedEntity("OwnedItem", assignedClass.data, { displaySheet: false }); + } + + static addImportButton(html){ + const header = $("#actors").find("header.directory-header"); + const search = $("#actors").children().find("div.header-search"); + const newImportButtonDiv = $("#actors").children().find("div.header-actions").clone(); + const newSearch = search.clone(); + search.remove(); + newImportButtonDiv.attr('id', 'character-sheet-import'); + header.append(newImportButtonDiv); + newImportButtonDiv.children("button").remove(); + newImportButtonDiv.append(""); + newSearch.appendTo(header); + + let characterImportButton = $("#cs-import-button"); + characterImportButton.click(ev => { + let content = '

Saved Character JSON Import

' + + ' ' + + '
' + + ''; + let importDialog = new Dialog({ + title: "Import Character from SW5e.com", + content: content, + buttons: { + "Import": { + icon: '', + label: "Import Character", + callback: (e) => { + let characterData = $('#character-json').val(); + console.log('Parsing Character JSON'); + CharacterImporter.transform(characterData); + } + }, + "Cancel": { + icon: '', + label: "Cancel", + callback: () => {}, + } + } + }) + importDialog.render(true); + }); + } +} \ No newline at end of file diff --git a/module/chat.js b/module/chat.js index f5b72e8d..f8ab035f 100644 --- a/module/chat.js +++ b/module/chat.js @@ -66,7 +66,7 @@ export const displayChatActionButtons = function(message, html, data) { export const addChatMessageContextOptions = function(html, options) { let canApply = li => { const message = game.messages.get(li.data("messageId")); - return message.isRoll && message.isContentVisible && canvas.tokens.controlled.length; + return message?.isRoll && message?.isContentVisible && canvas?.tokens.controlled.length; }; options.push( { @@ -103,15 +103,16 @@ export const addChatMessageContextOptions = function(html, options) { * Apply rolled dice damage to the token or tokens which are currently controlled. * This allows for damage to be scaled by a multiplier to account for healing, critical hits, or resistance * - * @param {HTMLElement} roll The chat entry which contains the roll data + * @param {HTMLElement} li The chat entry which contains the roll data * @param {Number} multiplier A damage multiplier to apply to the rolled damage. * @return {Promise} */ -function applyChatCardDamage(roll, multiplier) { - const amount = roll.find('.dice-total').text(); +function applyChatCardDamage(li, multiplier) { + const message = game.messages.get(li.data("messageId")); + const roll = message.roll; return Promise.all(canvas.tokens.controlled.map(t => { const a = t.actor; - return a.applyDamage(amount, multiplier); + return a.applyDamage(roll.total, multiplier); })); } diff --git a/module/combat.js b/module/combat.js index b407c33a..8132a5ac 100644 --- a/module/combat.js +++ b/module/combat.js @@ -12,7 +12,7 @@ export const _getInitiativeFormula = function(combatant) { let nd = 1; let mods = ""; - + if (actor.getFlag("sw5e", "halflingLucky")) mods += "r1=1"; if (actor.getFlag("sw5e", "initiativeAdv")) { nd = 2; @@ -26,15 +26,3 @@ export const _getInitiativeFormula = function(combatant) { if ( tiebreaker ) parts.push(actor.data.data.abilities.dex.value / 100); return parts.filter(p => p !== null).join(" + "); }; - -/** - * When the Combat encounter updates - re-render open Actor sheets for combatants in the encounter. - */ -Hooks.on("updateCombat", (combat, data, options, userId) => { - const updateTurn = ("turn" in data) || ("round" in data); - if ( !updateTurn ) return; - for ( let t of combat.turns ) { - const a = t.actor; - if ( t.actor ) t.actor.sheet.render(false); - } -}); diff --git a/module/config.js b/module/config.js index 4008e13b..c5168635 100644 --- a/module/config.js +++ b/module/config.js @@ -274,7 +274,7 @@ SW5E.consumableTypes = { "food": "SW5E.ConsumableFood", "medpac": "SW5E.ConsumableMedpac", "technology": "SW5E.ConsumableTechnology", - "ammunition": "SW5E.ConsumableAmmunition", + "ammo": "SW5E.ConsumableAmmunition", "trinket": "SW5E.ConsumableTrinket", "force": "SW5E.ConsumableForce", "tech": "SW5E.ConsumableTech" diff --git a/module/dice.js b/module/dice.js index c05dd3df..cea097fd 100644 --- a/module/dice.js +++ b/module/dice.js @@ -42,7 +42,7 @@ export function simplifyRollFormula(formula, data, {constantFirst = false} = {}) const parts = constantFirst ? // Order the rollable and constant terms, either constant first or second depending on the optional argumen [constantPart, rollableFormula] : [rollableFormula, constantPart]; - + // Join the parts with a + sign, pass them to `Roll` once again to clean up the formula return new Roll(parts.filterJoin(" + ")).formula; } @@ -52,7 +52,7 @@ export function simplifyRollFormula(formula, data, {constantFirst = false} = {}) /** * Only some terms are supported by simplifyRollFormula, this method returns true when the term is not supported. * @param {*} term - A single Dice term to check support on - * @return {Boolean} True when unsupported, false if supported + * @return {Boolean} True when unsupported, false if supported */ function _isUnsupportedTerm(term) { const diceTerm = term instanceof DiceTerm; @@ -110,8 +110,8 @@ export async function d20Roll({parts=[], data={}, event={}, rollMode=null, templ let adv = 0; fastForward = fastForward ?? (event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey)); if (fastForward) { - if ( advantage || event.altKey ) adv = 1; - else if ( disadvantage || event.ctrlKey || event.metaKey ) adv = -1; + if ( advantage ?? event.altKey ) adv = 1; + else if ( disadvantage ?? (event.ctrlKey || event.metaKey) ) adv = -1; } // Define the inner roll function diff --git a/module/item/entity.js b/module/item/entity.js index a1b64f0c..37bcb1ee 100644 --- a/module/item/entity.js +++ b/module/item/entity.js @@ -251,12 +251,14 @@ export default class Item5e extends Item { // Item Actions if ( data.hasOwnProperty("actionType") ) { + // if this item is owned, we populate the label and saving throw during actor init + if (!this.isOwned) { + // Saving throws + this.getSaveDC(); - // Saving throws - this.getSaveDC(); - - // To Hit - this.getAttackToHit(); + // To Hit + this.getAttackToHit(); + } // Damage let dam = data.damage || {}; @@ -312,7 +314,7 @@ export default class Item5e extends Item { * - item's actor's proficiency bonus if applicable * - item's actor's global bonuses to the given item type * - item's ammunition if applicable - * + * * @returns {Object} returns `rollData` and `parts` to be used in the item's Attack roll */ getAttackToHit() { @@ -397,7 +399,7 @@ export default class Item5e extends Item { // Define follow-up actions resulting from the item usage let createMeasuredTemplate = hasArea; // Trigger a template creation let consumeRecharge = !!recharge.value; // Consume recharge - let consumeResource = !!resource.target && (resource.type !== "ammo") // Consume a linked (non-ammo) resource + let consumeResource = !!resource.target && resource.type !== "ammo" && !['simpleB', 'martialB'].includes(id.weaponType); // Consume a linked (non-ammo) resource, ignore if use is from a blaster let consumePowerSlot = requirePowerSlot; // Consume a power slot let consumeUsage = !!uses.per; // Consume limited uses let consumeQuantity = uses.autoDestroy; // Consume quantity of the item in lieu of uses @@ -915,7 +917,8 @@ export default class Item5e extends Item { if ( powerLevel ) rollData.item.level = powerLevel; // Configure the damage roll - const title = `${this.name} - ${game.i18n.localize("SW5E.DamageRoll")}`; + const actionFlavor = game.i18n.localize(itemData.actionType === "heal" ? "SW5E.Healing" : "SW5E.DamageRoll"); + const title = `${this.name} - ${actionFlavor}`; const rollConfig = { actor: this.actor, critical: critical ?? event?.altKey ?? false, diff --git a/module/migration.js b/module/migration.js index b627e0e3..335d30e9 100644 --- a/module/migration.js +++ b/module/migration.js @@ -120,8 +120,8 @@ export const migrateCompendium = async function(pack) { /** * Migrate a single Actor entity to incorporate latest data model changes * Return an Object of updateData to be applied - * @param {Actor} actor The actor to Update - * @return {Object} The updateData to apply + * @param {object} actor The actor data object to update + * @return {Object} The updateData to apply */ export const migrateActorData = function(actor) { const updateData = {}; @@ -232,13 +232,24 @@ export const migrateSceneData = function(scene) { * Migrate the actor speed string to movement object * @private */ -function _migrateActorMovement(actor, updateData) { - const ad = actor.data; - const old = actor.type === 'vehicle' ? ad?.attributes?.speed : ad?.attributes?.speed?.value; - if ( typeof old !== "string" ) return; - const s = (old || "").split(" "); - if ( s.length > 0 ) updateData["data.attributes.movement.walk"] = Number.isNumeric(s[0]) ? parseInt(s[0]) : null; - updateData["data.attributes.-=speed"] = null; +function _migrateActorMovement(actorData, updateData) { + const ad = actorData.data; + + // Work is needed if old data is present + const old = actorData.type === 'vehicle' ? ad?.attributes?.speed : ad?.attributes?.speed?.value; + const hasOld = old !== undefined; + if ( hasOld ) { + + // If new data is not present, migrate the old data + const hasNew = ad?.attributes?.movement?.walk !== undefined; + if ( !hasNew && (typeof old === "string") ) { + const s = (old || "").split(" "); + if ( s.length > 0 ) updateData["data.attributes.movement.walk"] = Number.isNumeric(s[0]) ? parseInt(s[0]) : null; + } + + // Remove the old attribute + updateData["data.attributes.-=speed"] = null; + } return updateData } @@ -254,7 +265,7 @@ function _migrateActorSenses(actor, updateData) { const original = ad.traits.senses || ""; // Try to match old senses with the format like "Darkvision 60 ft, Blindsight 30 ft" - const pattern = /([A-z]+)\s?([0-9]+)\s?([A-z]+)?/ + const pattern = /([A-z]+)\s?([0-9]+)\s?([A-z]+)?/; let wasMatched = false; // Match each comma-separated term diff --git a/module/templates.js b/module/templates.js index f3de3dc4..af337996 100644 --- a/module/templates.js +++ b/module/templates.js @@ -14,11 +14,11 @@ export const preloadHandlebarsTemplates = async function() { "systems/sw5e/templates/actors/oldActor/parts/actor-inventory.html", "systems/sw5e/templates/actors/oldActor/parts/actor-features.html", "systems/sw5e/templates/actors/oldActor/parts/actor-powerbook.html", - "systems/sw5e/templates/actors/oldActor/parts/actor-notes.html", + "systems/sw5e/templates/actors/oldActor/parts/actor-notes.html", "systems/sw5e/templates/actors/newActor/parts/swalt-biography.html", "systems/sw5e/templates/actors/newActor/parts/swalt-core.html", - "systems/sw5e/templates/actors/newActor/parts/swalt-active-effects.html", + "systems/sw5e/templates/actors/newActor/parts/swalt-active-effects.html", "systems/sw5e/templates/actors/newActor/parts/swalt-features.html", "systems/sw5e/templates/actors/newActor/parts/swalt-inventory.html", "systems/sw5e/templates/actors/newActor/parts/swalt-powerbook.html", diff --git a/sw5e copy.css b/sw5e copy.css index 58d9546a..c19de745 100644 --- a/sw5e copy.css +++ b/sw5e copy.css @@ -1,1787 +1,1791 @@ -/* Deprecated vars */ -/* ----------------------------------------- */ -/* Fonts */ -/* ----------------------------------------- */ - -/* russo-one-regular - latin */ -@font-face { - font-family: 'Russo One'; - font-style: normal; - font-weight: 400; - src: url('./fonts/RussoOne.ttf'); -} -/* bungee-inline-regular - latin */ -@font-face { - font-family: 'Bungee Inline'; - font-style: normal; - font-weight: 400; - src: url('./fonts/BungeeInline.ttf'); -} -/* open-sans-regular - latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400; - src: url('./fonts/OpenSans-Regular.ttf'); -} -body { - width: 100vw; - height: 100vh; - margin: 0; - overflow: hidden; - background-image: url('./ui/SW5e-logo.svg'); - background-repeat: no-repeat; - background-size: cover; - font-family: 'Open Sans'; - font-size: 14px; - box-shadow: 0 0 50vw #000 inset; -} -/* ----------------------------------------- */ -/* Sheet Styles */ -/* ----------------------------------------- */ -/* ----------------------------------------- */ -/* Flexbox */ -/* ----------------------------------------- */ -.flexrow { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; -} -.flexrow > * { - flex: 1; -} -.flexrow .flex1 { - flex: 1; -} -.flexrow .flex2 { - flex: 2; -} -.flexrow .flex3 { - flex: 3; -} -.flexrow .flex4 { - flex: 4; -} -.flexcol { - display: flex; - flex-direction: column; - flex-wrap: nowrap; -} -.flexcol > * { - flex: 1; -} -.flexcol .flex1 { - flex: 1; -} -.flexcol .flex2 { - flex: 2; -} -.flexcol .flex3 { - flex: 3; -} -.flexcol .flex4 { - flex: 4; -} -/* ----------------------------------------- */ -/* All SW5e Apps */ -/* ----------------------------------------- */ -.sw5e { - /* ----------------------------------------- */ - /* Element Styles */ - /* ----------------------------------------- */ - /* Form Groups */ - /* Tags */ -} -.sw5e .window-content { - background: url("ui/parchment.webp") repeat; - font-size: 13px; - color: #191813; -} -.sw5e input[type="text"] -.sw5e select { - height: calc(100% - 2px); - border: 1px solid #7a7971; - background: rgba(0, 0, 0, 0.05); - color: #191813; -} -.sw5e input[type="text"]:hover, -.sw5e input[type="text"]:focus { - border: 1px solid #111; - box-shadow: 0 0 8px red; -} -.sw5e input:disabled, -.sw5e select:disabled, -.sw5e textarea:disabled { - color: #4b4a44; -} -.sw5e input:disabled:hover, -.sw5e select:disabled:hover, -.sw5e textarea:disabled:hover, -.sw5e input:disabled:focus, -.sw5e select:disabled:focus, -.sw5e textarea:disabled:focus { - box-shadow: none !important; - border: 1px solid transparent !important; - outline: none !important; -} -.sw5e button { - background: rgba(0, 0, 0, 0.1); - border: 2px groove #eeede0; -} -.sw5e label.checkbox { - flex: auto; - margin: 0; - line-height: 20px; - font-size: 10px; - text-align: right; -} -.sw5e label.checkbox input[type="checkbox"] { - height: auto; - margin: 0 5px 0; - position: relative; - top: 3px; -} -.sw5e .form-group label { - flex: 2; - color: #4b4a44; - font-weight: bold; -} -.sw5e .form-group .form-fields { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; -} -.sw5e .form-group .form-fields > * { - flex: 1; -} -.sw5e .form-group .form-fields .flex1 { - flex: 1; -} -.sw5e .form-group .form-fields .flex2 { - flex: 2; -} -.sw5e .form-group .form-fields .flex3 { - flex: 3; -} -.sw5e .form-group .form-fields .flex4 { - flex: 4; -} -.sw5e .form-group .form-fields > * { - margin: 0 3px 0 0; -} -.sw5e .form-group .form-fields > *:last-child { - margin-right: 0; -} -.sw5e .form-group.stacked label { - flex: 0 0 100%; - margin: 0; -} -.sw5e .form-group.stacked label.checkbox { - flex: auto; - text-align: left; -} -.sw5e .form-header { - margin: 0 0 0.25em 0; - padding: 0 2px; - font-family: "Russo One"; - font-size: 8px; - font-size: 12px; - border-top: 2px groove #eeede0; - border-bottom: 2px groove #eeede0; -} -.sw5e .tag { - display: inline-block; - margin: 0 2px 0 0; - padding: 0 3px; - font-size: 10px; - line-height: 16px; - border: 1px solid #999; - border-radius: 3px; - background: rgba(0, 0, 0, 0.05); -} -/* ----------------------------------------- */ -/* Entity Sheets Specifically */ -/* ----------------------------------------- */ -.sw5e.sheet { - /* ----------------------------------------- */ - /* Element Styles */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* TinyMCE */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Sheet Header */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Sheet Navigation */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Sheet Body */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* List Filters */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Trait Lists */ - /* ----------------------------------------- */ -} -.sw5e.sheet .window-content { - overflow-y: hidden; - padding: 5px; - background: url("ui/parchment.webp") repeat; - font-size: 13px; - color: #191813; -} -.sw5e.sheet .window-content form { - height: 100%; - overflow: hidden; -} -.sw5e.sheet .window-content .tab { - height: 100%; - overflow-y: auto; - align-content: flex-start; -} -.sw5e.sheet input[type="text"] { - background: none; - border: 1px solid transparent; -} -.sw5e.sheet input[type="text"]:hover, -.sw5e.sheet input[type="text"]:focus { - border: 1px solid #111; -} -.sw5e.sheet select { - flex: 1; - font-size: 12px; - height: 22px; - background: transparent; -} -.sw5e.sheet .editable .rollable:hover { - color: #000; - text-shadow: 0 0 10px red; - cursor: pointer; -} -.sw5e.sheet .editor { - height: 100%; -} -.sw5e.sheet .editor .tox-toolbar-overlord, -.sw5e.sheet .editor .tox-toolbar__primary { - background: none; -} -.sw5e.sheet .sheet-header { - flex: 0 0 100px; - border-bottom: 2px groove #eeede0; - font-family: "Russo One"; - font-size: 14px; - /* Character Name */ - /* Profile Image */ - /* Header Summary Details */ -} -.sw5e.sheet .sheet-header h1 { - flex: 2; - border-bottom: none; - height: 60px; - margin: 0; - padding: 5px; -} -.sw5e.sheet .sheet-header h1 input { - height: 50px; - font-size: 22px; - text-transform: uppercase; -} -.sw5e.sheet .sheet-header img.profile { - flex: 0 0 100px; - max-width: 100px; - height: 100px; - object-fit: cover; - border: none; - border-right: 2px groove #eeede0; -} -.sw5e.sheet .sheet-header .summary { - flex: 0 0 100%; - height: 40px; - margin: 0; - padding: 0; - list-style: none; - border-top: 2px groove #eeede0; - border-bottom: none; -} -.sw5e.sheet .sheet-header .summary li { - width: 33.33%; - float: left; - height: 34px; - margin: 2px 0; - padding: 0 3px; - border-right: 2px groove #eeede0; - line-height: 34px; - color: #4b4a44; -} -.sw5e.sheet .sheet-header .summary li:last-child { - border-right: none; -} -.sw5e.sheet .sheet-navigation { - flex: 0 0 30px; - margin-bottom: 5px; - font-family: "Russo One"; - font-size: 12px; -} -.sw5e.sheet .sheet-navigation .item { - height: 30px; - line-height: 32px; - margin: 0 24px; - border-bottom: 3px solid #b5b3a4; -} -.sw5e.sheet .sheet-navigation .item.active { - border-bottom: 3px solid #44191A; -} -.sw5e.sheet .sheet-body { - flex: 1; - overflow: hidden; - font-family: "Open Sans"; -} -.sw5e.sheet .sheet-body h1 { - font-family: "Russo One"; - font-size: 22px; - text-transform: uppercase; - color: #c40f0f; - border: 0px; -} -.sw5e.sheet .sheet-body h2 { - font-family: "Russo One"; - font-size: 18px; - text-transform: uppercase; - color: #c40f0f; -} -.sw5e.sheet .sheet-body th { - font-family: "Russo One"; - text-transform: uppercase; - color: #c40f0f; -} -.sw5e.sheet .sheet-body tr:nth-child(odd) { - background-color: #c9d6db; -} -.sw5e.sheet .sheet-body tr:nth-child(even) { - background-color: #bdc8cc; -} -.sw5e.sheet .sheet-body .smalltable table { - width: 200px; - border: 0px; - margin: 0.5em 0.5em; -} -.sw5e.sheet .sheet-body .smalltable td:nth-child(odd) { - width: 50px; - margin: 0.5em 0.5em; -} -.sw5e.sheet .sheet-body .smalltable td:nth-child(even) { - width: 150px; - margin: 0.5em 0.5em; - padding: 0px 10px 0px 10px; -} -.sw5e.sheet .sheet-body .smalltable thead { - border-bottom: 0px; -} -.sw5e.sheet .sheet-body .smalltable th { - color: #000000; - text-shadow: none; - border-bottom: 0px; - background-color: #bdc8cc; - text-transform: none; - font-weight: bold; - font-family: 'Open Sans'; -} -.sw5e.sheet .sheet-body .medtable table { - width: 500px; - border: 0px; - margin: 0.5em 0.5em; -} -.sw5e.sheet .sheet-body .medtable td:nth-child(odd) { - width: 50px; - margin: 0.5em 0.5em; -} -.sw5e.sheet .sheet-body .medtable td:nth-child(even) { - width: 450px; - margin: 0.5em 0.5em; - padding: 0px 10px 0px 10px; -} -.sw5e.sheet .sheet-body .medtable thead { - border-bottom: 0px; -} -.sw5e.sheet .sheet-body .medtable th { - color: #000000; - text-shadow: none; - border-bottom: 0px; - background-color: #bdc8cc; - text-transform: none; - font-weight: bold; - font-family: 'Open Sans'; -} -.sw5e.sheet .sheet-body .classtable blockquote { - border-left: 0px; - border-right: 0px; -} -.sw5e.sheet .sheet-body .classtable table { - width: 100%; - border-collapse: collapse; - background: rgba(0, 0, 0, 0.05); - border-left: 0px; - border-right: 0px; - border-top: 0; - border-bottom: 0; - margin: 0.5em 0; - font-style: normal; - font-weight: normal; - text-shadow: none; -} -.sw5e.sheet .sheet-body .classtable thead { - color: #000000; - text-shadow: none; - border-bottom: 0px; - background-color: #bdc8cc; - text-transform: none; - font-style: normal; - font-weight: normal; - font-family: 'Open Sans'; -} -.sw5e.sheet .sheet-body .classtable th { - color: #000000; - text-shadow: none; - border-bottom: 0px; - background-color: #bdc8cc; - text-transform: none; - font-style: normal; - font-weight: bold; - font-family: 'Open Sans'; -} -.sw5e.sheet .filter-list { - list-style: none; - margin: 0; - padding: 0; - line-height: 16px; -} -.sw5e.sheet .filter-list .filter-title { - flex: 3; -} -.sw5e.sheet .filter-list .filter-item { - text-align: center; - font-size: 12px; - margin: 0 6px; - border-bottom: 3px solid #b5b3a4; - white-space: nowrap; -} -.sw5e.sheet .filter-list .filter-item:hover { - text-shadow: 0 0 4px red; - border-bottom: 3px solid #7a7971; -} -.sw5e.sheet .filter-list .filter-item.active { - border-bottom: 3px solid #44191A; -} -.sw5e.sheet .trait-selector { - flex: 0 0 16px; - padding: 2px 0; - color: #999; - font-size: 10px; -} -.sw5e.sheet .traits-list { - line-height: 20px; - list-style: none; - margin: 0; - padding: 0; - text-align: right; -} -/* ----------------------------------------- */ -/* Trait Selector -/* ----------------------------------------- */ -#trait-selector .trait-list { - list-style: none; - margin: 0; - padding: 0; -} -#trait-selector input[type="text"] { - height: 24px; - margin: 2px; -} -.sw5e.sheet.actor { - /* ----------------------------------------- */ - /* Sheet Header */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* General Styles */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Attributes */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Ability Scores */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Skills */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Statuses */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Traits */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Inventory Lists */ - /* ----------------------------------------- */ - /* Inventory List Filters */ - /* ----------------------------------------- */ - /* Powerbook */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* TinyMCE */ - /* ----------------------------------------- */ -} -.sw5e.sheet.actor .sheet-header .charlevel { - flex: 0 0 160px; - height: 60px; - margin: 0; - padding: 5px; - text-align: right; -} -.sw5e.sheet.actor .sheet-header .charlevel .level { - width: 100%; - height: 30px; - font-size: 18px; - line-height: 30px; -} -.sw5e.sheet.actor .sheet-header .charlevel .level label { - display: inline; - font-size: 18px; - text-align: right; -} -.sw5e.sheet.actor .sheet-header .charlevel .level input { - display: inline; - width: 36px; - font-size: 18px; - text-align: center; -} -.sw5e.sheet.actor .sheet-header .charlevel .level.noxp { - margin-top: 10px; -} -.sw5e.sheet.actor .sheet-header .charlevel .level.noxp > label { - font-size: 32px; -} -.sw5e.sheet.actor .sheet-header .charlevel .level.noxp > input { - font-size: 18px; - flex: 0 0 40px; - height: 44px; -} -.sw5e.sheet.actor .sheet-header .charlevel .experience { - width: 100%; - height: 20px; - padding-right: 5px; - font-size: 16px; - color: #4b4a44; -} -.sw5e.sheet.actor .attributes input.temphp { - width: 48%; -} -.sw5e.sheet.actor h4.box-title { - line-height: 16px; - margin: 4px 8px 2px; - font-size: 14px; - border-bottom: 1px solid #b5b3a4; -} -.sw5e.sheet.actor ul.attributes { - list-style: none; - margin: 5px 0 0; - padding: 0; -} -.sw5e.sheet.actor ul.attributes li.attribute { - height: 70px; - margin: 0 5px; - border: 2px groove #eeede0; - border-radius: 4px; - font-family: "Russo One"; - font-size: 12px; - text-align: center; -} -.sw5e.sheet.actor ul.attributes li.attribute .attribute-name { - flex: 0 0 18px; -} -.sw5e.sheet.actor ul.attributes li.attribute .attribute-value { - height: 28px; - line-height: 28px; -} -.sw5e.sheet.actor ul.attributes li.attribute .attribute-value input { - display: inline; - max-width: 80%; - height: 28px; - margin: 0; - font-size: 14px; -} -.sw5e.sheet.actor ul.attributes li.attribute .attribute-value span.sep { - display: inline; - position: relative; - top: 2px; - font-size: 28px; - color: #7a7971; -} -.sw5e.sheet.actor ul.attributes li.attribute .attribute-value.multiple input { - max-width: 33%; -} -.sw5e.sheet.actor ul.attributes li.attribute .attribute-footer { - flex: 0 0 18px; - margin-top: -1px; - line-height: 18px; - font-family: "Signika", "Palatino Linotype", serif; - font-size: 12px; -} -.sw5e.sheet.actor .ability-scores { - flex: 0 0 100%; - list-style: none; - margin: 0; - padding: 0; - font-family: "Russo One"; - font-size: 8px; -} -.sw5e.sheet.actor .ability-scores .ability { - height: 70px; - margin: 0 5px; - text-align: center; - border: 2px groove #eeede0; - border-radius: 3px; - /* Hide modifier box on hover */ -} -.sw5e.sheet.actor .ability-scores .ability input.ability-score { - height: 30px; - width: 50px; - margin: 0 auto; - line-height: 32px; - font-size: 16px; -} -.sw5e.sheet.actor .ability-scores .ability .ability-modifiers { - height: 24px; - margin: -10px 0 0; -} -.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-mod, -.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-save { - flex: 0 0 24px; - height: 24px; - border-top: 2px groove #eeede0; -} -.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-mod { - border-right: 2px groove #eeede0; -} -.sw5e.sheet.actor .ability-scores .ability .ability-modifiers .ability-proficiency { - line-height: 30px; -} -.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-save { - border-left: 2px groove #eeede0; -} -.sw5e.sheet.actor .ability-scores .ability input.ability-score:hover + .ability-modifiers { - visibility: hidden; -} -.sw5e.sheet.actor .proficiency-toggle { - color: #b5b3a4; - font-size: 12px; -} -.sw5e.sheet.actor .proficient .proficiency-toggle { - color: #4b4a44; -} -.sw5e.sheet.actor .locked .proficiency-toggle { - color: #b5b3a4; - text-shadow: none; - cursor: default; -} -.sw5e.sheet.actor ul.skills-list { - flex: 0 0 192px; - list-style: none; - margin: 5px 5px 0; - padding: 2px 2px 0; - border: 2px groove #eeede0; - border-radius: 3px; -} -.sw5e.sheet.actor ul.skills-list li.skill { - height: 22px; - padding: 3px 0; -} -.sw5e.sheet.actor ul.skills-list li.skill h4 { - flex: 1px; - margin: 0; - font-size: 11px; - line-height: 18px; -} -.sw5e.sheet.actor ul.skills-list li.skill .skill-proficiency { - flex: 0 0 16px; - line-height: 18px; -} -.sw5e.sheet.actor ul.skills-list li.skill .skill-ability { - flex: 0 0 26px; -} -.sw5e.sheet.actor ul.skills-list li.skill .skill-mod { - flex: 0 0 20px; -} -.sw5e.sheet.actor ul.skills-list li.skill .skill-passive { - flex: 0 0 26px; - text-align: center; - color: #7a7971; -} -.sw5e.sheet.actor .counters { - flex: 0 0 100%; - border-bottom: 2px groove #eeede0; - margin-bottom: 5px; -} -.sw5e.sheet.actor .counters .counter { - padding: 0 3px; - line-height: 32px; -} -.sw5e.sheet.actor .counters .counter h4 { - flex: auto; - margin: 0; - font-family: "Russo One"; - font-size: 14px; - font-size: 10px; -} -.sw5e.sheet.actor .counters .counter .counter-value { - flex: 0 0 50px; - text-align: right; -} -.sw5e.sheet.actor .counters .counter .counter-value > * { - display: inline; -} -.sw5e.sheet.actor .counters .counter input[type="text"] { - height: 20px; - max-width: 20px; - margin: 0; - padding: 0; - text-align: center; -} -.sw5e.sheet.actor .counters .counter input[type="checkbox"] { - position: relative; - margin: 0; - top: 6px; -} -.sw5e.sheet.actor .counters .counter span.sep { - margin: 0 -2px; - font-size: 12px; -} -.sw5e.sheet.actor .traits { - margin: 0 5px; -} -.sw5e.sheet.actor .traits .form-group, -.sw5e.sheet.actor .traits .form-group-stacked { - margin: 0 0 4px 0; - justify-content: space-between; -} -.sw5e.sheet.actor .traits .configure-flags { - flex: 1; -} -.sw5e.sheet.actor .traits .actor-size { - flex: 0 0 150px; -} -.sw5e.sheet.actor .traits label { - flex: 0 0 150px; - line-height: 20px; - font-weight: bold; - margin: 0; -} -.sw5e.sheet.actor .traits input { - text-align: right; -} -.sw5e.sheet.actor .traits i.fas { - float: right; - margin-right: 3px; - text-align: right; - color: #999; -} -.sw5e.sheet.actor .traits i.fas:hover { - color: #111; - text-shadow: 0 0 10px red; -} -.sw5e.sheet.actor .traits .inactive { - color: #7a7971; -} -.sw5e.sheet.actor .tab.features, -.sw5e.sheet.actor .tab.inventory, -.sw5e.sheet.actor .tab.powerbook { - overflow-y: hidden; -} -.sw5e.sheet.actor .inventory-filters { - margin: 0 8px; - flex: 0 0 20px; -} -.sw5e.sheet.actor .inventory-filters h3, -.sw5e.sheet.actor .inventory-filters .filter-title { - font-family: "Russo One"; - font-size: 10px; - color: #4b4a44; - font-size: 12px; - margin: 0; -} -.sw5e.sheet.actor .inventory-filters.powerbook-filters { - flex: 0 0 40px; -} -.sw5e.sheet.actor .inventory-filters .currency { - list-style: none; - margin: 4px 0 8px; - padding: 0; - font-size: 12px; -} -.sw5e.sheet.actor .inventory-filters .currency label { - flex: 0; - margin-left: 8px; - text-align: right; - line-height: 20px; - color: #7a7971; -} -.sw5e.sheet.actor .inventory-filters .currency input[type="text"] { - flex: 0 0 48px; - text-align: center; - margin-left: 8px; - border-bottom: 2px groove #eeede0; -} -.sw5e.sheet.actor .inventory-list { - list-style: none; - margin: 0; - padding: 0 5px; - overflow-y: auto; -} -.sw5e.sheet.actor .inventory-list .item { - line-height: 30px; - padding: 0 2px; - border-bottom: 1px solid #c9c7b8; -} -.sw5e.sheet.actor .inventory-list .item:last-child { - border-bottom: none; -} -.sw5e.sheet.actor .inventory-list .item .item-name { - cursor: pointer; - max-height: 30px; - overflow: hidden; -} -.sw5e.sheet.actor .inventory-list .item .item-name .item-image { - flex: 0 0 30px; - background-size: 30px; - margin-right: 5px; -} -.sw5e.sheet.actor .inventory-list .item .item-name h4 { - margin: 0; - white-space: nowrap; - overflow-x: hidden; -} -.sw5e.sheet.actor .inventory-list .item .item-name.rollable .item-image:hover { - background-image: url("/icons/svg/d20-black.svg") !important; -} -.sw5e.sheet.actor .inventory-list .item .item-name.rollable:hover .item-image { - background-image: url("/icons/svg/d20-grey.svg") !important; -} -.sw5e.sheet.actor .inventory-list .item .item-name i.attuned { - color: #7a7971; -} -.sw5e.sheet.actor .inventory-list .item .item-uses input { - width: 24px; - text-align: center; -} -.sw5e.sheet.actor .inventory-list .item .item-properties { - margin-top: 3px; -} -.sw5e.sheet.actor .inventory-list .item .item-recharge { - flex: 0 0 80px; - text-align: right; - font-size: 11px; - color: #7a7971; -} -.sw5e.sheet.actor .inventory-list .inventory-header { - margin: 2px 0; - padding: 0; - background: rgba(0, 0, 0, 0.05); - border: 2px groove #eeede0; - font-weight: bold; - line-height: 24px; -} -.sw5e.sheet.actor .inventory-list .inventory-header h3 { - margin: 0 -5px 0 0; - padding-left: 5px; - font-size: 13px; - font-weight: bold; -} -.sw5e.sheet.actor .inventory-list .inventory-header .item-controls a.item-create { - flex: 0 0 100%; -} -.sw5e.sheet.actor .inventory-list .item-detail { - flex: 0 0 70px; - font-size: 12px; - color: #7a7971; - text-align: center; - border-right: 1px solid #c9c7b8; -} -.sw5e.sheet.actor .inventory-list .item-detail:last-child { - border-right: none; -} -.sw5e.sheet.actor .inventory-list .item-detail.item-action { - flex: 0 0 100px; -} -.sw5e.sheet.actor .inventory-list .item-weight { - flex: 0 0 60px; - border-left: 1px solid #c9c7b8; - border-right: 1px solid #c9c7b8; -} -.sw5e.sheet.actor .inventory-list .item-list { - list-style: none; - margin: 0; - padding: 0; -} -.sw5e.sheet.actor .inventory-list .item-controls { - flex: 0 0 44px; - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; - justify-content: flex-end; -} -.sw5e.sheet.actor .inventory-list .item-controls > * { - flex: 1; -} -.sw5e.sheet.actor .inventory-list .item-controls .flex1 { - flex: 1; -} -.sw5e.sheet.actor .inventory-list .item-controls .flex2 { - flex: 2; -} -.sw5e.sheet.actor .inventory-list .item-controls .flex3 { - flex: 3; -} -.sw5e.sheet.actor .inventory-list .item-controls .flex4 { - flex: 4; -} -.sw5e.sheet.actor .inventory-list .item-controls a { - flex: 0 0 22px; - font-size: 12px; - text-align: center; - color: #7a7971; -} -.sw5e.sheet.actor .inventory-list .item-summary { - flex: 0 0 100%; - font-size: 12px; - line-height: 16px; - padding: 0.25em 0.5em; - border-top: 1px solid #c9c7b8; -} -.sw5e.sheet.actor .powercasting-ability h3, -.sw5e.sheet.actor .pact-slots h3 { - flex: none; - margin-right: 5px; -} -.sw5e.sheet.actor .powercasting-ability input, -.sw5e.sheet.actor .pact-slots input, -.sw5e.sheet.actor .powercasting-ability span, -.sw5e.sheet.actor .pact-slots span { - flex: 0 0 32px; - text-align: center; -} -.sw5e.sheet.actor .powercasting-ability select, -.sw5e.sheet.actor .pact-slots select { - margin: 0 5px; - flex: 0 0 150px; -} -.sw5e.sheet.actor .powercasting-ability h3.power-dc, -.sw5e.sheet.actor .pact-slots h3.power-dc { - flex: 1; - text-align: right; -} -.sw5e.sheet.actor .pact-slots { - align-items: center; -} -.sw5e.sheet.actor .power-slots, -.sw5e.sheet.actor .power-comps { - flex: 0 0 72px; - padding-right: 5px; - text-align: right; - font-size: 12px; - color: #7a7971; - border-right: 1px solid #c9c7b8; -} -.sw5e.sheet.actor .power-slots input, -.sw5e.sheet.actor .power-slots span.sep { - display: inline; - max-width: 20px; - text-align: center; -} -.sw5e.sheet.actor .power-uses { - padding-right: 8px; - text-align: right !important; -} -.sw5e.sheet.actor .power-school, -.sw5e.sheet.actor .power-action, -.sw5e.sheet.actor .power-target { - flex: 0 0 100px; - font-size: 12px; - color: #7a7971; - text-align: center; - border-right: 1px solid #c9c7b8; -} -.sw5e.sheet.actor .power-component { - line-height: 14px; -} -.sw5e.sheet.actor .power-component.C, -.sw5e.sheet.actor .power-component.R { - display: inline-block; - text-align: center; - padding-top: 1px; - width: 16px; - color: #c9c7b8; - background: rgba(0, 0, 0, 0.4); - border: 1px solid transparent; - border-radius: 8px; -} -.sw5e.sheet.actor .powerbook-empty .item-controls { - flex: 1; -} -.sw5e.sheet.actor .editor { - padding: 0 8px; -} -.sw5e.sheet.item { - min-height: 520px; - min-width: 700px; - /* ----------------------------------------- */ - /* Sheet Header */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Item Details Form */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Item Actions */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Item Actions */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Loot Sheet (No Tabs) */ - /* ----------------------------------------- */ -} -.sw5e.sheet.item .sheet-header img.profile { - border: 2px solid #000; -} -.sw5e.sheet.item .sheet-header .item-subtitle { - flex: 1 0 80px; - height: 60px; - margin: 0; - padding: 5px; - text-align: right; - color: #7a7971; -} -.sw5e.sheet.item .sheet-header .item-subtitle .item-type { - font-size: 16px; - line-height: 26px; - margin: 0; -} -.sw5e.sheet.item .sheet-header .item-subtitle .item-status { - font-size: 16px; - line-height: 24px; -} -.sw5e.sheet.item .sheet-navigation { - margin-bottom: 5px; -} -.sw5e.sheet.item .sheet-navigation .item { - font-size: 14px; -} -.sw5e.sheet.item .sheet-body { - overflow: hidden; - font-family: "Open Sans"; -} -.sw5e.sheet.item .sheet-body h2 { - font-family: "Russo One"; - font-size: 18px; - border-bottom: 2px solid #0d99cc; -} -.sw5e.sheet.item .sheet-body h3 { - font-family: "Russo One"; - color: #c40f0f; - text-transform: uppercase; -} -.sw5e.sheet.item .sheet-body .tab { - padding: 0 5px; - overflow: hidden auto; -} -.sw5e.sheet.item .sheet-body .item-properties { - flex: 0 0 120px; - margin: 5px 5px 5px 0; - padding-right: 5px; - border-right: 2px groove #eeede0; -} -.sw5e.sheet.item .sheet-body .item-properties .form-group { - margin: 0; -} -.sw5e.sheet.item .sheet-body .item-properties .form-group label { - line-height: 20px; -} -.sw5e.sheet.item .sheet-body .item-properties .form-group input { - text-align: right; -} -.sw5e.sheet.item .sheet-body .item-properties .properties-list { - list-style: none; - margin: 0; - padding: 0; -} -.sw5e.sheet.item .sheet-body .item-properties .properties-list li { - margin: 3px 0; - padding: 0 2px; - background: rgba(0, 0, 0, 0.05); - border: 2px groove #eeede0; - text-align: center; - font-size: 12px; - line-height: 18px; -} -.sw5e.sheet.item .details input[type="text"], -.sw5e.sheet.item .details select { - height: 24px; - border: 1px solid #7a7971; - background: rgba(0, 0, 0, 0.05); -} -.sw5e.sheet.item .details .form-group span { - text-align: center; - line-height: 24px; -} -.sw5e.sheet.item .details .form-group.input-select select { - flex: 1.8; -} -.sw5e.sheet.item .details .form-group.input-select-select select { - flex: 1.5; -} -.sw5e.sheet.item .details .form-group.uses-per input { - flex: 1; -} -.sw5e.sheet.item .details .form-group.uses-per span { - flex: 0 0 16px; -} -.sw5e.sheet.item .details .form-group.uses-per select { - flex: 3; -} -.sw5e.sheet.item .details span.sep { - flex: 0 0 8px; -} -.sw5e.sheet.item .details .prepared { - flex: 1.3 !important; - text-align: right; - padding-right: 10px; -} -.sw5e.sheet.item .details .power-materials { - flex: 0 0 100%; - margin: 0.25em 0; - justify-content: flex-end; -} -.sw5e.sheet.item .details .power-materials label { - flex: 0 0 64px; - text-align: right; - margin-right: 5px; - font-size: 12px; - line-height: 24px; -} -.sw5e.sheet.item .details .power-materials input[type="text"] { - flex: 0 0 48px; - margin-right: 10px; -} -.sw5e.sheet.item h4.damage-header { - margin: 0; - padding: 0; - font-weight: bold; - line-height: 24px; - color: #4b4a44; -} -.sw5e.sheet.item .damage-parts { - list-style: none; - margin: 0; - padding: 0; -} -.sw5e.sheet.item .damage-parts .damage-part { - flex: 0 0 100%; - padding: 0; -} -.sw5e.sheet.item .damage-parts .damage-part input { - flex: 3; -} -.sw5e.sheet.item .damage-parts .damage-part select { - margin-left: 5px; - flex: 1; -} -.sw5e.sheet.item .damage-control { - width: 18px; - flex: 0 0 18px; - line-height: 24px; - float: right; - text-align: right; - color: #7a7971; -} - -.sw5e.sheet.item h4.armorproperties-header { - margin: 0; - padding: 0; - font-weight: bold; - line-height: 24px; - color: #4b4a44; -} -.sw5e.sheet.item .armorproperties-parts { - list-style: none; - margin: 0; - padding: 0; -} -.sw5e.sheet.item .armorproperties-parts .armorproperties-part { - flex: 0 0 100%; - padding: 0; -} -.sw5e.sheet.item .armorproperties-parts .armorproperties-part input { - flex: 3; -} -.sw5e.sheet.item .armorproperties-parts .armorproperties-part select { - margin-left: 5px; - flex: 1; -} -.sw5e.sheet.item .armorproperties-control { - width: 18px; - flex: 0 0 18px; - line-height: 24px; - float: right; - text-align: right; - color: #7a7971; - -} - -.sw5e.sheet.item h4.weaponproperties-header { - margin: 0; - padding: 0; - font-weight: bold; - line-height: 24px; - color: #4b4a44; -} -.sw5e.sheet.item .weaponproperties-parts { - list-style: none; - margin: 0; - padding: 0; -} -.sw5e.sheet.item .weaponproperties-parts .weaponproperties-part { - flex: 0 0 100%; - padding: 0; -} -.sw5e.sheet.item .weaponproperties-parts .weaponproperties-part input { - flex: 3; -} -.sw5e.sheet.item .weaponproperties-parts .weaponproperties-part select { - margin-left: 5px; - flex: 1; -} -.sw5e.sheet.item .weaponproperties-control { - width: 18px; - flex: 0 0 18px; - line-height: 24px; - float: right; - text-align: right; - color: #7a7971; -} - -.sw5e.sheet.item .recharge span { - flex: 0 0 80px; -} -.sw5e.sheet.item .recharge label.checkbox { - flex: 0 0 80px; - text-align: right; -} -.sw5e.sheet.item .weapon-properties label.checkbox { - flex: 0 0 98px; -} -.sw5e.sheet.item .loot-header { - margin-bottom: 10px; -} -.sw5e.sheet.item blockquote { - box-sizing: border-box; - font-family: 'Open Sans'; - margin-bottom: 1em; - padding: 5px 10px; - background-color: #bdc8cc; - border: 0px solid #0d99cc; - border-spacing: 0em; - border-image: none; - box-shadow: 0px 0px 20px rgba(13, 153, 204, 0.5); - border-top: 0.1em solid #0d99cc; - border-bottom: 0.1em solid #0d99cc; - border-left: 0.1em solid #0d99cc; - border-right: 0.1em solid #0d99cc; - color: #000000; - font-size: 1em; -} - -.sw5e.sheet.item blockquote h3 { - font-family: 'Russo One'; - color: #000000 !important; -} -/* ----------------------------------------- */ -/* Chat Cards -/* ----------------------------------------- */ -.sw5e.chat-card { - font-style: normal; - font-size: 12px; -} -.sw5e.chat-card .card-header { - padding: 3px 0; - border-top: 2px groove #FFF; - border-bottom: 2px groove #FFF; -} -.sw5e.chat-card .card-header img { - flex: 0 0 36px; - margin-right: 5px; -} -.sw5e.chat-card .card-header h3 { - flex: 1; - margin: 0; - line-height: 36px; - font-family: "Russo One"; - font-size: 10px; - color: #4b4a44; -} -.sw5e.chat-card .card-header h3:hover { - color: #111; - text-shadow: 0 0 10px red; -} -.sw5e.chat-card .card-content { - margin: 5px 0; -} -.sw5e.chat-card .card-content h3 { - font-size: 12px; - margin: 0; - font-weight: bold; -} -.sw5e.chat-card .card-content > * { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} -.sw5e.chat-card .card-buttons { - margin: 5px 0; -} -.sw5e.chat-card .card-buttons span { - display: block; - line-height: 28px; - text-align: center; - border: 1px solid #CCC; -} -.sw5e.chat-card .card-buttons button { - font-size: 12px; - height: 24px; - line-height: 20px; - margin: 2px 0; -} -.sw5e.chat-card .card-footer { - padding: 3px 0 0; - border-top: 2px groove #FFF; -} -.sw5e.chat-card .card-footer span { - border-right: 2px groove #FFF; - padding: 0 3px 0 0; - font-size: 10px; -} -.sw5e.chat-card .card-footer span:last-child { - border-right: none; - padding-right: 0; -} -.dice-roll .dice-total.success { - color: inherit; - background: #c7d0c0; - border: 1px solid #006c00; -} -.dice-roll .dice-total.failure { - color: inherit; - background: #ffdddd; - border: 1px solid #6e0000; -} -.dice-roll .dice-total.critical { - color: green; -} -.dice-roll .dice-total.fumble { - color: red; -} -/* ----------------------------------------- */ -/* Basic Structure */ -/* ----------------------------------------- */ -.sw5e.sheet.actor.character { - min-width: 680px; - min-height: 736px; - /* ----------------------------------------- */ - /* Sheet Header */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Sheet Body */ - /* ----------------------------------------- */ - /* ----------------------------------------- */ - /* Inventory */ - /* ----------------------------------------- */ - /* Encumbrance Bar */ - /* ----------------------------------------- */ - /* Item Controls */ - /* ----------------------------------------- */ -} -.sw5e.sheet.actor.character .sheet-header img.profile { - flex: 0 0 180px; - max-width: 180px; - height: 180px; -} -.sw5e.sheet.actor.character .sheet-header .charlevel { - flex: 0 0 180px; - padding: 0 5px 2px; -} -.sw5e.sheet.actor.character .sheet-header .charlevel .level { - height: 28px; -} -.sw5e.sheet.actor.character .sheet-header .charlevel .experience input[type="text"] { - width: 100px; -} -.sw5e.sheet.actor.character .sheet-header .charlevel .xpbar { - width: 100%; - flex: 0 0 8px; - background: #666; - border: 1px solid #000; - border-radius: 3px; -} -.sw5e.sheet.actor.character .sheet-header .charlevel .xpbar .bar { - height: 4px; - margin: 1px; - display: block; - background: #afebff; - border: 1px solid #000; - border-radius: 2px; -} -.sw5e.sheet.actor.character .sheet-header .summary { - border-bottom: 2px groove #eeede0; -} -.sw5e.sheet.actor.character .sheet-header .attributes { - height: 80px; - margin: 0; -} -.sw5e.sheet.actor.character .sheet-header .attributes .attribute { - height: 80px; - margin: 0; - border: none; - border-right: 2px groove #eeede0; - border-radius: 0; -} -.sw5e.sheet.actor.character .sheet-header .attributes .attribute:last-child { - border-right: none; -} -.sw5e.sheet.actor.character .sheet-header .attributes .attribute .attribute-value { - margin: 5px 0 0; - height: 32px; - line-height: 32px; -} -.sw5e.sheet.actor.character .sheet-header .attributes .attribute .attribute-name { - margin-top: 6px; -} -.sw5e.sheet.actor.character .sheet-header .attributes .attribute .attribute-footer { - margin-bottom: 2px; -} -.sw5e.sheet.actor.character .sheet-header .attributes a.rest { - border: 1px solid #b5b3a4; - border-radius: 2px; - background: rgba(0, 0, 0, 0.05); - padding: 1px 3px; - margin: 0 6px; -} -.sw5e.sheet.actor.character .sheet-header .attributes .hit-dice { - font-size: 16px; -} -.sw5e.sheet.actor.character .attributes .resource .attribute-name { - margin: 0 8px; -} -.sw5e.sheet.actor.character .attributes .resource .attribute-name input[type="text"] { - height: 20px; - margin: 2px 0 -2px; - line-height: 24px; -} -.sw5e.sheet.actor.character .attributes .resource label.checkbox { - margin: 0 3px; -} -.sw5e.sheet.actor.character .attributes .resource label.checkbox input[type="checkbox"] { - transform: scale(1.2); -} -.sw5e.sheet.actor.character .attributes .initiative .attribute-footer input { - width: 32px; -} -.sw5e.sheet.actor.character ul.skills-list { - flex: 0 0 212px; -} -.sw5e.sheet.actor.character ul.skills-list li.skill { - padding: 3px; -} -.sw5e.sheet.actor.character ul.skills-list li.skill h4 { - flex: 1px; - margin: 0; - font-size: 13px; -} -.sw5e.sheet.actor.character .counters .death-saves { - flex: 2; -} -.sw5e.sheet.actor.character .counters .death-saves .counter-value { - flex: 0 0 90px; -} -.sw5e.sheet.actor.character .item-detail.player-class { - flex: 0 0 180px; - text-align: right; - padding-right: 10px; -} -.sw5e.sheet.actor.character .encumbrance { - flex: 0 0 12px; - background: #7a7971; - margin: 1px 15px 0 1px; - border: 1px solid #191813; - border-radius: 3px; - position: relative; -} -.sw5e.sheet.actor.character .encumbrance .encumbrance-bar { - position: absolute; - top: 1px; - left: 1px; - background: #6c8aa5; - height: 8px; - border: 1px solid #cde4ff; - border-radius: 2px; -} -.sw5e.sheet.actor.character .encumbrance .encumbrance-label { - height: 10px; - padding: 0 5px; - position: absolute; - top: 0; - right: 0; - font-size: 13px; - line-height: 12px; - text-align: right; - color: #EEE; - text-shadow: 0 0 5px #000; -} -.sw5e.sheet.actor.character .encumbrance .encumbrance-breakpoint { - display: block; - position: absolute; -} -.sw5e.sheet.actor.character .encumbrance .encumbrance-breakpoint.encumbrance-33 { - left: 33%; -} -.sw5e.sheet.actor.character .encumbrance .encumbrance-breakpoint.encumbrance-66 { - left: 66%; -} -.sw5e.sheet.actor.character .encumbrance .arrow-up { - bottom: 0; - width: 0; - height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-bottom: 4px solid #666; -} -.sw5e.sheet.actor.character .encumbrance .arrow-down { - top: 0; - width: 0; - height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #666; -} -.sw5e.sheet.actor.character .encumbrance.encumbered .arrow-up { - border-bottom: 4px solid #000; -} -.sw5e.sheet.actor.character .encumbrance.encumbered .arrow-down { - border-top: 4px solid #000; -} -.sw5e.sheet.actor.character .inventory .item-controls, -.sw5e.sheet.actor.character .powerbook .item-controls { - flex: 0 0 68px; -} -.sw5e.sheet.actor.character .inventory .item-controls .item-toggle, -.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle { - color: #b5b3a4; -} -.sw5e.sheet.actor.character .inventory .item-controls .item-toggle.active, -.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle.active { - color: #4b4a44; -} -.sw5e.sheet.actor.character .inventory .item-controls .item-toggle.fixed, -.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle.fixed { - color: #44191A; -} -.sw5e.sheet.actor.character .inventory .item-controls .item-toggle.fixed:hover, -.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle.fixed:hover { - text-shadow: none; -} -/* ----------------------------------------- */ -/* Basic Structure */ -/* ----------------------------------------- */ -.sw5e.sheet.actor.npc { - min-width: 800px; - min-height: 658px; -} -/* ----------------------------------------- */ -/* Journal Entry -/* ----------------------------------------- */ -.journal-sheet .window-content { - padding: 0; - background: url("ui/parchment.webp") repeat; -} -.journal-sheet form { - overflow: hidden; - padding: 5px; - font-family: "Open Sans"; - background: url("ui/parchment.webp") repeat; -} -.journal-sheet form h2 { - font-family: "Russo One"; - font-size: 18px; - text-transform: uppercase; - color: #c40f0f; -} - -.journal-sheet form input[name="name"] { - height: 36px; - font-family: "Russo One"; - font-size: 24px; - text-transform: uppercase; - color: #c40f0f; - line-height: 36px; -} -.journal-sheet form select { - width: 100%; - height: 30px; - margin: 5px 0; -} -.journal-sheet form .editor { - height: calc(100% - 115px); -} -.journal-sheet form button[type="submit"] { - margin-top: 5px; -} -.journal-sheet form img { - border: none -} -.journal-sheet form table { - border: none; - background-color: none; -} -/* ---------------------------------------- */ -/* Roll Table Sheet */ -/* ---------------------------------------- */ -.roll-table-config .window-content { - background: url("ui/parchment.webp") repeat; -} -.roll-table-config form { - background: url("ui/parchment.webp") repeat; -} -.roll-table-config h1.name input { - width: 100%; - height: 36px; - margin: 0 0 5px; - font-family: "Russo One"; - font-size: 24px; - text-transform: uppercase; - color: #c40f0f; -} -.roll-table-config textarea { - resize: none; - min-height: 44px; - font-family: "Open Sans"; - background: url("ui/parchment.webp") repeat; -} -.roll-table-config ol.table-results { - list-style: none; - margin: 0; - padding: 0; - max-height: 600px; - overflow-y: auto; -} -.roll-table-config ol.table-results .table-result { - padding: 2px 0; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; -} -.roll-table-config ol.table-results .table-result input[type="text"] { - width: 100%; - height: 28px; -} -.roll-table-config ol.table-results .table-result > div { - line-height: 36px; - margin-right: 5px; -} -.roll-table-config ol.table-results .table-result .result-image { - flex: 0 0 36px; - width: 36px; - height: 36px; - text-align: center; - margin: 0; -} -.roll-table-config ol.table-results .table-result .result-image img { - border: none; - object-fit: cover; - object-position: 50% 0; -} -.roll-table-config ol.table-results .table-result .result-type { - flex: 0 0 110px; -} -.roll-table-config ol.table-results .table-result .result-details { - flex: 1; -} -.roll-table-config ol.table-results .table-result .result-details select { - width: 40%; -} -.roll-table-config ol.table-results .table-result .result-details .result-target { - width: 58%; - margin-left: 3px; -} -.roll-table-config ol.table-results .table-result .result-weight { - flex: 0 0 50px; - text-align: center; -} -.roll-table-config ol.table-results .table-result .result-range { - flex: 0 0 92px; - text-align: center; -} -.roll-table-config ol.table-results .table-result .result-range input { - width: 36px; -} -.roll-table-config ol.table-results .table-result .result-controls { - flex: 0 0 40px; - margin: 0; - text-align: center; -} -.roll-table-config ol.table-results .table-result .result-controls a { - width: 20px; -} -.roll-table-config ol.table-results .table-result .result-controls .lock-result { - color: #b5b3a4; -} -.roll-table-config ol.table-results .table-result.roulette { - background: url("ui/parchment.webp") repeat; - border-top: 1px solid #000; - border-bottom: 1px solid #000; -} -.roll-table-config ol.table-results .table-result.drawn { - background: rgba(0, 0, 0, 0.15); -} -.roll-table-config ol.table-results .table-result.drawn .lock-result { - color: #111; -} -.roll-table-config ol.table-results .table-header { - background: url("ui/parchment.webp") repeat; - border: 1px solid #7a7971; - line-height: 24px; - font-weight: bold; -} -.icon:before { - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - -webkit-font-smoothing: antialiased; -} -a.entity-link { - background: #DDD; - padding: 1px 4px; - border: 1px solid #4b4a44; - border-radius: 2px; - white-space: nowrap; - word-break: break-all; -} -a.entity-link i::before { - content: url("ui/jedi-order.svg") !important; - display: inline-block; - position: relative; - top: 2px; - height: 15px; - width: 15px; -} +/* Deprecated vars */ +/* ----------------------------------------- */ +/* Fonts */ +/* ----------------------------------------- */ + +/* russo-one-regular - latin */ +@font-face { + font-family: 'Russo One'; + font-style: normal; + font-weight: 400; + src: url('./fonts/RussoOne.ttf'); +} +@font-face { + font-family: 'Engli-Besh'; + font-style: normal; + font-weight: 400; + src: url('./fonts/EngliBesh-KG3W.ttf'); +} +.engli-Besh { + font-family: 'Engli-Besh'; + font-size: 20px; + font-weight: 400; +} +/* open-sans-regular - latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: url('./fonts/OpenSans-Regular.ttf'); +} +body { + width: 100vw; + height: 100vh; + margin: 0; + overflow: hidden; + background-image: url('./ui/SW5e-logo.svg'); + background-repeat: no-repeat; + background-size: cover; + font-family: 'Open Sans'; + font-size: 14px; + box-shadow: 0 0 50vw #000 inset; +} +/* ----------------------------------------- */ +/* Sheet Styles */ +/* ----------------------------------------- */ +/* ----------------------------------------- */ +/* Flexbox */ +/* ----------------------------------------- */ +.flexrow { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; +} +.flexrow > * { + flex: 1; +} +.flexrow .flex1 { + flex: 1; +} +.flexrow .flex2 { + flex: 2; +} +.flexrow .flex3 { + flex: 3; +} +.flexrow .flex4 { + flex: 4; +} +.flexcol { + display: flex; + flex-direction: column; + flex-wrap: nowrap; +} +.flexcol > * { + flex: 1; +} +.flexcol .flex1 { + flex: 1; +} +.flexcol .flex2 { + flex: 2; +} +.flexcol .flex3 { + flex: 3; +} +.flexcol .flex4 { + flex: 4; +} +/* ----------------------------------------- */ +/* All SW5e Apps */ +/* ----------------------------------------- */ +.sw5e { + /* ----------------------------------------- */ + /* Element Styles */ + /* ----------------------------------------- */ + /* Form Groups */ + /* Tags */ +} +.sw5e .window-content { + background: url("ui/parchment.webp") repeat; + font-size: 13px; + color: #191813; +} +.sw5e input[type="text"] +.sw5e select { + height: calc(100% - 2px); + border: 1px solid #7a7971; + background: rgba(0, 0, 0, 0.05); + color: #191813; +} +.sw5e input[type="text"]:hover, +.sw5e input[type="text"]:focus { + border: 1px solid #111; + box-shadow: 0 0 8px red; +} +.sw5e input:disabled, +.sw5e select:disabled, +.sw5e textarea:disabled { + color: #4b4a44; +} +.sw5e input:disabled:hover, +.sw5e select:disabled:hover, +.sw5e textarea:disabled:hover, +.sw5e input:disabled:focus, +.sw5e select:disabled:focus, +.sw5e textarea:disabled:focus { + box-shadow: none !important; + border: 1px solid transparent !important; + outline: none !important; +} +.sw5e button { + background: rgba(0, 0, 0, 0.1); + border: 2px groove #eeede0; +} +.sw5e label.checkbox { + flex: auto; + margin: 0; + line-height: 20px; + font-size: 10px; + text-align: right; +} +.sw5e label.checkbox input[type="checkbox"] { + height: auto; + margin: 0 5px 0; + position: relative; + top: 3px; +} +.sw5e .form-group label { + flex: 2; + color: #4b4a44; + font-weight: bold; +} +.sw5e .form-group .form-fields { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; +} +.sw5e .form-group .form-fields > * { + flex: 1; +} +.sw5e .form-group .form-fields .flex1 { + flex: 1; +} +.sw5e .form-group .form-fields .flex2 { + flex: 2; +} +.sw5e .form-group .form-fields .flex3 { + flex: 3; +} +.sw5e .form-group .form-fields .flex4 { + flex: 4; +} +.sw5e .form-group .form-fields > * { + margin: 0 3px 0 0; +} +.sw5e .form-group .form-fields > *:last-child { + margin-right: 0; +} +.sw5e .form-group.stacked label { + flex: 0 0 100%; + margin: 0; +} +.sw5e .form-group.stacked label.checkbox { + flex: auto; + text-align: left; +} +.sw5e .form-header { + margin: 0 0 0.25em 0; + padding: 0 2px; + font-family: "Russo One"; + font-size: 8px; + font-size: 12px; + border-top: 2px groove #eeede0; + border-bottom: 2px groove #eeede0; +} +.sw5e .tag { + display: inline-block; + margin: 0 2px 0 0; + padding: 0 3px; + font-size: 10px; + line-height: 16px; + border: 1px solid #999; + border-radius: 3px; + background: rgba(0, 0, 0, 0.05); +} +/* ----------------------------------------- */ +/* Entity Sheets Specifically */ +/* ----------------------------------------- */ +.sw5e.sheet { + /* ----------------------------------------- */ + /* Element Styles */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* TinyMCE */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Sheet Header */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Sheet Navigation */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Sheet Body */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* List Filters */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Trait Lists */ + /* ----------------------------------------- */ +} +.sw5e.sheet .window-content { + overflow-y: hidden; + padding: 5px; + background: url("ui/parchment.webp") repeat; + font-size: 13px; + color: #191813; +} +.sw5e.sheet .window-content form { + height: 100%; + overflow: hidden; +} +.sw5e.sheet .window-content .tab { + height: 100%; + overflow-y: auto; + align-content: flex-start; +} +.sw5e.sheet input[type="text"] { + background: none; + border: 1px solid transparent; +} +.sw5e.sheet input[type="text"]:hover, +.sw5e.sheet input[type="text"]:focus { + border: 1px solid #111; +} +.sw5e.sheet select { + flex: 1; + font-size: 12px; + height: 22px; + background: transparent; +} +.sw5e.sheet .editable .rollable:hover { + color: #000; + text-shadow: 0 0 10px red; + cursor: pointer; +} +.sw5e.sheet .editor { + height: 100%; +} +.sw5e.sheet .editor .tox-toolbar-overlord, +.sw5e.sheet .editor .tox-toolbar__primary { + background: none; +} +.sw5e.sheet .sheet-header { + flex: 0 0 100px; + border-bottom: 2px groove #eeede0; + font-family: "Russo One"; + font-size: 14px; + /* Character Name */ + /* Profile Image */ + /* Header Summary Details */ +} +.sw5e.sheet .sheet-header h1 { + flex: 2; + border-bottom: none; + height: 60px; + margin: 0; + padding: 5px; +} +.sw5e.sheet .sheet-header h1 input { + height: 50px; + font-size: 22px; + text-transform: uppercase; +} +.sw5e.sheet .sheet-header img.profile { + flex: 0 0 100px; + max-width: 100px; + height: 100px; + object-fit: cover; + border: none; + border-right: 2px groove #eeede0; +} +.sw5e.sheet .sheet-header .summary { + flex: 0 0 100%; + height: 40px; + margin: 0; + padding: 0; + list-style: none; + border-top: 2px groove #eeede0; + border-bottom: none; +} +.sw5e.sheet .sheet-header .summary li { + width: 33.33%; + float: left; + height: 34px; + margin: 2px 0; + padding: 0 3px; + border-right: 2px groove #eeede0; + line-height: 34px; + color: #4b4a44; +} +.sw5e.sheet .sheet-header .summary li:last-child { + border-right: none; +} +.sw5e.sheet .sheet-navigation { + flex: 0 0 30px; + margin-bottom: 5px; + font-family: "Russo One"; + font-size: 12px; +} +.sw5e.sheet .sheet-navigation .item { + height: 30px; + line-height: 32px; + margin: 0 24px; + border-bottom: 3px solid #b5b3a4; +} +.sw5e.sheet .sheet-navigation .item.active { + border-bottom: 3px solid #44191A; +} +.sw5e.sheet .sheet-body { + flex: 1; + overflow: hidden; + font-family: "Open Sans"; +} +.sw5e.sheet .sheet-body h1 { + font-family: "Russo One"; + font-size: 22px; + text-transform: uppercase; + color: #c40f0f; + border: 0px; +} +.sw5e.sheet .sheet-body h2 { + font-family: "Russo One"; + font-size: 18px; + text-transform: uppercase; + color: #c40f0f; +} +.sw5e.sheet .sheet-body th { + font-family: "Russo One"; + text-transform: uppercase; + color: #c40f0f; +} +.sw5e.sheet .sheet-body tr:nth-child(odd) { + background-color: #c9d6db; +} +.sw5e.sheet .sheet-body tr:nth-child(even) { + background-color: #bdc8cc; +} +.sw5e.sheet .sheet-body .smalltable table { + width: 200px; + border: 0px; + margin: 0.5em 0.5em; +} +.sw5e.sheet .sheet-body .smalltable td:nth-child(odd) { + width: 50px; + margin: 0.5em 0.5em; +} +.sw5e.sheet .sheet-body .smalltable td:nth-child(even) { + width: 150px; + margin: 0.5em 0.5em; + padding: 0px 10px 0px 10px; +} +.sw5e.sheet .sheet-body .smalltable thead { + border-bottom: 0px; +} +.sw5e.sheet .sheet-body .smalltable th { + color: #000000; + text-shadow: none; + border-bottom: 0px; + background-color: #bdc8cc; + text-transform: none; + font-weight: bold; + font-family: 'Open Sans'; +} +.sw5e.sheet .sheet-body .medtable table { + width: 500px; + border: 0px; + margin: 0.5em 0.5em; +} +.sw5e.sheet .sheet-body .medtable td:nth-child(odd) { + width: 50px; + margin: 0.5em 0.5em; +} +.sw5e.sheet .sheet-body .medtable td:nth-child(even) { + width: 450px; + margin: 0.5em 0.5em; + padding: 0px 10px 0px 10px; +} +.sw5e.sheet .sheet-body .medtable thead { + border-bottom: 0px; +} +.sw5e.sheet .sheet-body .medtable th { + color: #000000; + text-shadow: none; + border-bottom: 0px; + background-color: #bdc8cc; + text-transform: none; + font-weight: bold; + font-family: 'Open Sans'; +} +.sw5e.sheet .sheet-body .classtable blockquote { + border-left: 0px; + border-right: 0px; +} +.sw5e.sheet .sheet-body .classtable table { + width: 100%; + border-collapse: collapse; + background: rgba(0, 0, 0, 0.05); + border-left: 0px; + border-right: 0px; + border-top: 0; + border-bottom: 0; + margin: 0.5em 0; + font-style: normal; + font-weight: normal; + text-shadow: none; +} +.sw5e.sheet .sheet-body .classtable thead { + color: #000000; + text-shadow: none; + border-bottom: 0px; + background-color: #bdc8cc; + text-transform: none; + font-style: normal; + font-weight: normal; + font-family: 'Open Sans'; +} +.sw5e.sheet .sheet-body .classtable th { + color: #000000; + text-shadow: none; + border-bottom: 0px; + background-color: #bdc8cc; + text-transform: none; + font-style: normal; + font-weight: bold; + font-family: 'Open Sans'; +} +.sw5e.sheet .filter-list { + list-style: none; + margin: 0; + padding: 0; + line-height: 16px; +} +.sw5e.sheet .filter-list .filter-title { + flex: 3; +} +.sw5e.sheet .filter-list .filter-item { + text-align: center; + font-size: 12px; + margin: 0 6px; + border-bottom: 3px solid #b5b3a4; + white-space: nowrap; +} +.sw5e.sheet .filter-list .filter-item:hover { + text-shadow: 0 0 4px red; + border-bottom: 3px solid #7a7971; +} +.sw5e.sheet .filter-list .filter-item.active { + border-bottom: 3px solid #44191A; +} +.sw5e.sheet .trait-selector { + flex: 0 0 16px; + padding: 2px 0; + color: #999; + font-size: 10px; +} +.sw5e.sheet .traits-list { + line-height: 20px; + list-style: none; + margin: 0; + padding: 0; + text-align: right; +} +/* ----------------------------------------- */ +/* Trait Selector +/* ----------------------------------------- */ +#trait-selector .trait-list { + list-style: none; + margin: 0; + padding: 0; +} +#trait-selector input[type="text"] { + height: 24px; + margin: 2px; +} +.sw5e.sheet.actor { + /* ----------------------------------------- */ + /* Sheet Header */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* General Styles */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Attributes */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Ability Scores */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Skills */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Statuses */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Traits */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Inventory Lists */ + /* ----------------------------------------- */ + /* Inventory List Filters */ + /* ----------------------------------------- */ + /* Powerbook */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* TinyMCE */ + /* ----------------------------------------- */ +} +.sw5e.sheet.actor .sheet-header .charlevel { + flex: 0 0 160px; + height: 60px; + margin: 0; + padding: 5px; + text-align: right; +} +.sw5e.sheet.actor .sheet-header .charlevel .level { + width: 100%; + height: 30px; + font-size: 18px; + line-height: 30px; +} +.sw5e.sheet.actor .sheet-header .charlevel .level label { + display: inline; + font-size: 18px; + text-align: right; +} +.sw5e.sheet.actor .sheet-header .charlevel .level input { + display: inline; + width: 36px; + font-size: 18px; + text-align: center; +} +.sw5e.sheet.actor .sheet-header .charlevel .level.noxp { + margin-top: 10px; +} +.sw5e.sheet.actor .sheet-header .charlevel .level.noxp > label { + font-size: 32px; +} +.sw5e.sheet.actor .sheet-header .charlevel .level.noxp > input { + font-size: 18px; + flex: 0 0 40px; + height: 44px; +} +.sw5e.sheet.actor .sheet-header .charlevel .experience { + width: 100%; + height: 20px; + padding-right: 5px; + font-size: 16px; + color: #4b4a44; +} +.sw5e.sheet.actor .attributes input.temphp { + width: 48%; +} +.sw5e.sheet.actor h4.box-title { + line-height: 16px; + margin: 4px 8px 2px; + font-size: 14px; + border-bottom: 1px solid #b5b3a4; +} +.sw5e.sheet.actor ul.attributes { + list-style: none; + margin: 5px 0 0; + padding: 0; +} +.sw5e.sheet.actor ul.attributes li.attribute { + height: 70px; + margin: 0 5px; + border: 2px groove #eeede0; + border-radius: 4px; + font-family: "Russo One"; + font-size: 12px; + text-align: center; +} +.sw5e.sheet.actor ul.attributes li.attribute .attribute-name { + flex: 0 0 18px; +} +.sw5e.sheet.actor ul.attributes li.attribute .attribute-value { + height: 28px; + line-height: 28px; +} +.sw5e.sheet.actor ul.attributes li.attribute .attribute-value input { + display: inline; + max-width: 80%; + height: 28px; + margin: 0; + font-size: 14px; +} +.sw5e.sheet.actor ul.attributes li.attribute .attribute-value span.sep { + display: inline; + position: relative; + top: 2px; + font-size: 28px; + color: #7a7971; +} +.sw5e.sheet.actor ul.attributes li.attribute .attribute-value.multiple input { + max-width: 33%; +} +.sw5e.sheet.actor ul.attributes li.attribute .attribute-footer { + flex: 0 0 18px; + margin-top: -1px; + line-height: 18px; + font-family: "Signika", "Palatino Linotype", serif; + font-size: 12px; +} +.sw5e.sheet.actor .ability-scores { + flex: 0 0 100%; + list-style: none; + margin: 0; + padding: 0; + font-family: "Russo One"; + font-size: 8px; +} +.sw5e.sheet.actor .ability-scores .ability { + height: 70px; + margin: 0 5px; + text-align: center; + border: 2px groove #eeede0; + border-radius: 3px; + /* Hide modifier box on hover */ +} +.sw5e.sheet.actor .ability-scores .ability input.ability-score { + height: 30px; + width: 50px; + margin: 0 auto; + line-height: 32px; + font-size: 16px; +} +.sw5e.sheet.actor .ability-scores .ability .ability-modifiers { + height: 24px; + margin: -10px 0 0; +} +.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-mod, +.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-save { + flex: 0 0 24px; + height: 24px; + border-top: 2px groove #eeede0; +} +.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-mod { + border-right: 2px groove #eeede0; +} +.sw5e.sheet.actor .ability-scores .ability .ability-modifiers .ability-proficiency { + line-height: 30px; +} +.sw5e.sheet.actor .ability-scores .ability .ability-modifiers span.ability-save { + border-left: 2px groove #eeede0; +} +.sw5e.sheet.actor .ability-scores .ability input.ability-score:hover + .ability-modifiers { + visibility: hidden; +} +.sw5e.sheet.actor .proficiency-toggle { + color: #b5b3a4; + font-size: 12px; +} +.sw5e.sheet.actor .proficient .proficiency-toggle { + color: #4b4a44; +} +.sw5e.sheet.actor .locked .proficiency-toggle { + color: #b5b3a4; + text-shadow: none; + cursor: default; +} +.sw5e.sheet.actor ul.skills-list { + flex: 0 0 192px; + list-style: none; + margin: 5px 5px 0; + padding: 2px 2px 0; + border: 2px groove #eeede0; + border-radius: 3px; +} +.sw5e.sheet.actor ul.skills-list li.skill { + height: 22px; + padding: 3px 0; +} +.sw5e.sheet.actor ul.skills-list li.skill h4 { + flex: 1px; + margin: 0; + font-size: 11px; + line-height: 18px; +} +.sw5e.sheet.actor ul.skills-list li.skill .skill-proficiency { + flex: 0 0 16px; + line-height: 18px; +} +.sw5e.sheet.actor ul.skills-list li.skill .skill-ability { + flex: 0 0 26px; +} +.sw5e.sheet.actor ul.skills-list li.skill .skill-mod { + flex: 0 0 20px; +} +.sw5e.sheet.actor ul.skills-list li.skill .skill-passive { + flex: 0 0 26px; + text-align: center; + color: #7a7971; +} +.sw5e.sheet.actor .counters { + flex: 0 0 100%; + border-bottom: 2px groove #eeede0; + margin-bottom: 5px; +} +.sw5e.sheet.actor .counters .counter { + padding: 0 3px; + line-height: 32px; +} +.sw5e.sheet.actor .counters .counter h4 { + flex: auto; + margin: 0; + font-family: "Russo One"; + font-size: 14px; + font-size: 10px; +} +.sw5e.sheet.actor .counters .counter .counter-value { + flex: 0 0 50px; + text-align: right; +} +.sw5e.sheet.actor .counters .counter .counter-value > * { + display: inline; +} +.sw5e.sheet.actor .counters .counter input[type="text"] { + height: 20px; + max-width: 20px; + margin: 0; + padding: 0; + text-align: center; +} +.sw5e.sheet.actor .counters .counter input[type="checkbox"] { + position: relative; + margin: 0; + top: 6px; +} +.sw5e.sheet.actor .counters .counter span.sep { + margin: 0 -2px; + font-size: 12px; +} +.sw5e.sheet.actor .traits { + margin: 0 5px; +} +.sw5e.sheet.actor .traits .form-group, +.sw5e.sheet.actor .traits .form-group-stacked { + margin: 0 0 4px 0; + justify-content: space-between; +} +.sw5e.sheet.actor .traits .configure-flags { + flex: 1; +} +.sw5e.sheet.actor .traits .actor-size { + flex: 0 0 150px; +} +.sw5e.sheet.actor .traits label { + flex: 0 0 150px; + line-height: 20px; + font-weight: bold; + margin: 0; +} +.sw5e.sheet.actor .traits input { + text-align: right; +} +.sw5e.sheet.actor .traits i.fas { + float: right; + margin-right: 3px; + text-align: right; + color: #999; +} +.sw5e.sheet.actor .traits i.fas:hover { + color: #111; + text-shadow: 0 0 10px red; +} +.sw5e.sheet.actor .traits .inactive { + color: #7a7971; +} +.sw5e.sheet.actor .tab.features, +.sw5e.sheet.actor .tab.inventory, +.sw5e.sheet.actor .tab.powerbook { + overflow-y: hidden; +} +.sw5e.sheet.actor .inventory-filters { + margin: 0 8px; + flex: 0 0 20px; +} +.sw5e.sheet.actor .inventory-filters h3, +.sw5e.sheet.actor .inventory-filters .filter-title { + font-family: "Russo One"; + font-size: 10px; + color: #4b4a44; + font-size: 12px; + margin: 0; +} +.sw5e.sheet.actor .inventory-filters.powerbook-filters { + flex: 0 0 40px; +} +.sw5e.sheet.actor .inventory-filters .currency { + list-style: none; + margin: 4px 0 8px; + padding: 0; + font-size: 12px; +} +.sw5e.sheet.actor .inventory-filters .currency label { + flex: 0; + margin-left: 8px; + text-align: right; + line-height: 20px; + color: #7a7971; +} +.sw5e.sheet.actor .inventory-filters .currency input[type="text"] { + flex: 0 0 48px; + text-align: center; + margin-left: 8px; + border-bottom: 2px groove #eeede0; +} +.sw5e.sheet.actor .inventory-list { + list-style: none; + margin: 0; + padding: 0 5px; + overflow-y: auto; +} +.sw5e.sheet.actor .inventory-list .item { + line-height: 30px; + padding: 0 2px; + border-bottom: 1px solid #c9c7b8; +} +.sw5e.sheet.actor .inventory-list .item:last-child { + border-bottom: none; +} +.sw5e.sheet.actor .inventory-list .item .item-name { + cursor: pointer; + max-height: 30px; + overflow: hidden; +} +.sw5e.sheet.actor .inventory-list .item .item-name .item-image { + flex: 0 0 30px; + background-size: 30px; + margin-right: 5px; +} +.sw5e.sheet.actor .inventory-list .item .item-name h4 { + margin: 0; + white-space: nowrap; + overflow-x: hidden; +} +.sw5e.sheet.actor .inventory-list .item .item-name.rollable .item-image:hover { + background-image: url("/icons/svg/d20-black.svg") !important; +} +.sw5e.sheet.actor .inventory-list .item .item-name.rollable:hover .item-image { + background-image: url("/icons/svg/d20-grey.svg") !important; +} +.sw5e.sheet.actor .inventory-list .item .item-name i.attuned { + color: #7a7971; +} +.sw5e.sheet.actor .inventory-list .item .item-uses input { + width: 24px; + text-align: center; +} +.sw5e.sheet.actor .inventory-list .item .item-properties { + margin-top: 3px; +} +.sw5e.sheet.actor .inventory-list .item .item-recharge { + flex: 0 0 80px; + text-align: right; + font-size: 11px; + color: #7a7971; +} +.sw5e.sheet.actor .inventory-list .inventory-header { + margin: 2px 0; + padding: 0; + background: rgba(0, 0, 0, 0.05); + border: 2px groove #eeede0; + font-weight: bold; + line-height: 24px; +} +.sw5e.sheet.actor .inventory-list .inventory-header h3 { + margin: 0 -5px 0 0; + padding-left: 5px; + font-size: 13px; + font-weight: bold; +} +.sw5e.sheet.actor .inventory-list .inventory-header .item-controls a.item-create { + flex: 0 0 100%; +} +.sw5e.sheet.actor .inventory-list .item-detail { + flex: 0 0 70px; + font-size: 12px; + color: #7a7971; + text-align: center; + border-right: 1px solid #c9c7b8; +} +.sw5e.sheet.actor .inventory-list .item-detail:last-child { + border-right: none; +} +.sw5e.sheet.actor .inventory-list .item-detail.item-action { + flex: 0 0 100px; +} +.sw5e.sheet.actor .inventory-list .item-weight { + flex: 0 0 60px; + border-left: 1px solid #c9c7b8; + border-right: 1px solid #c9c7b8; +} +.sw5e.sheet.actor .inventory-list .item-list { + list-style: none; + margin: 0; + padding: 0; +} +.sw5e.sheet.actor .inventory-list .item-controls { + flex: 0 0 44px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; + justify-content: flex-end; +} +.sw5e.sheet.actor .inventory-list .item-controls > * { + flex: 1; +} +.sw5e.sheet.actor .inventory-list .item-controls .flex1 { + flex: 1; +} +.sw5e.sheet.actor .inventory-list .item-controls .flex2 { + flex: 2; +} +.sw5e.sheet.actor .inventory-list .item-controls .flex3 { + flex: 3; +} +.sw5e.sheet.actor .inventory-list .item-controls .flex4 { + flex: 4; +} +.sw5e.sheet.actor .inventory-list .item-controls a { + flex: 0 0 22px; + font-size: 12px; + text-align: center; + color: #7a7971; +} +.sw5e.sheet.actor .inventory-list .item-summary { + flex: 0 0 100%; + font-size: 12px; + line-height: 16px; + padding: 0.25em 0.5em; + border-top: 1px solid #c9c7b8; +} +.sw5e.sheet.actor .powercasting-ability h3, +.sw5e.sheet.actor .pact-slots h3 { + flex: none; + margin-right: 5px; +} +.sw5e.sheet.actor .powercasting-ability input, +.sw5e.sheet.actor .pact-slots input, +.sw5e.sheet.actor .powercasting-ability span, +.sw5e.sheet.actor .pact-slots span { + flex: 0 0 32px; + text-align: center; +} +.sw5e.sheet.actor .powercasting-ability select, +.sw5e.sheet.actor .pact-slots select { + margin: 0 5px; + flex: 0 0 150px; +} +.sw5e.sheet.actor .powercasting-ability h3.power-dc, +.sw5e.sheet.actor .pact-slots h3.power-dc { + flex: 1; + text-align: right; +} +.sw5e.sheet.actor .pact-slots { + align-items: center; +} +.sw5e.sheet.actor .power-slots, +.sw5e.sheet.actor .power-comps { + flex: 0 0 72px; + padding-right: 5px; + text-align: right; + font-size: 12px; + color: #7a7971; + border-right: 1px solid #c9c7b8; +} +.sw5e.sheet.actor .power-slots input, +.sw5e.sheet.actor .power-slots span.sep { + display: inline; + max-width: 20px; + text-align: center; +} +.sw5e.sheet.actor .power-uses { + padding-right: 8px; + text-align: right !important; +} +.sw5e.sheet.actor .power-school, +.sw5e.sheet.actor .power-action, +.sw5e.sheet.actor .power-target { + flex: 0 0 100px; + font-size: 12px; + color: #7a7971; + text-align: center; + border-right: 1px solid #c9c7b8; +} +.sw5e.sheet.actor .power-component { + line-height: 14px; +} +.sw5e.sheet.actor .power-component.C, +.sw5e.sheet.actor .power-component.R { + display: inline-block; + text-align: center; + padding-top: 1px; + width: 16px; + color: #c9c7b8; + background: rgba(0, 0, 0, 0.4); + border: 1px solid transparent; + border-radius: 8px; +} +.sw5e.sheet.actor .powerbook-empty .item-controls { + flex: 1; +} +.sw5e.sheet.actor .editor { + padding: 0 8px; +} +.sw5e.sheet.item { + min-height: 520px; + min-width: 700px; + /* ----------------------------------------- */ + /* Sheet Header */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Item Details Form */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Item Actions */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Item Actions */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Loot Sheet (No Tabs) */ + /* ----------------------------------------- */ +} +.sw5e.sheet.item .sheet-header img.profile { + border: 2px solid #000; +} +.sw5e.sheet.item .sheet-header .item-subtitle { + flex: 1 0 80px; + height: 60px; + margin: 0; + padding: 5px; + text-align: right; + color: #7a7971; +} +.sw5e.sheet.item .sheet-header .item-subtitle .item-type { + font-size: 16px; + line-height: 26px; + margin: 0; +} +.sw5e.sheet.item .sheet-header .item-subtitle .item-status { + font-size: 16px; + line-height: 24px; +} +.sw5e.sheet.item .sheet-navigation { + margin-bottom: 5px; +} +.sw5e.sheet.item .sheet-navigation .item { + font-size: 14px; +} +.sw5e.sheet.item .sheet-body { + overflow: hidden; + font-family: "Open Sans"; +} +.sw5e.sheet.item .sheet-body h2 { + font-family: "Russo One"; + font-size: 18px; + border-bottom: 2px solid #0d99cc; +} +.sw5e.sheet.item .sheet-body h3 { + font-family: "Russo One"; + color: #c40f0f; + text-transform: uppercase; +} +.sw5e.sheet.item .sheet-body .tab { + padding: 0 5px; + overflow: hidden auto; +} +.sw5e.sheet.item .sheet-body .item-properties { + flex: 0 0 120px; + margin: 5px 5px 5px 0; + padding-right: 5px; + border-right: 2px groove #eeede0; +} +.sw5e.sheet.item .sheet-body .item-properties .form-group { + margin: 0; +} +.sw5e.sheet.item .sheet-body .item-properties .form-group label { + line-height: 20px; +} +.sw5e.sheet.item .sheet-body .item-properties .form-group input { + text-align: right; +} +.sw5e.sheet.item .sheet-body .item-properties .properties-list { + list-style: none; + margin: 0; + padding: 0; +} +.sw5e.sheet.item .sheet-body .item-properties .properties-list li { + margin: 3px 0; + padding: 0 2px; + background: rgba(0, 0, 0, 0.05); + border: 2px groove #eeede0; + text-align: center; + font-size: 12px; + line-height: 18px; +} +.sw5e.sheet.item .details input[type="text"], +.sw5e.sheet.item .details select { + height: 24px; + border: 1px solid #7a7971; + background: rgba(0, 0, 0, 0.05); +} +.sw5e.sheet.item .details .form-group span { + text-align: center; + line-height: 24px; +} +.sw5e.sheet.item .details .form-group.input-select select { + flex: 1.8; +} +.sw5e.sheet.item .details .form-group.input-select-select select { + flex: 1.5; +} +.sw5e.sheet.item .details .form-group.uses-per input { + flex: 1; +} +.sw5e.sheet.item .details .form-group.uses-per span { + flex: 0 0 16px; +} +.sw5e.sheet.item .details .form-group.uses-per select { + flex: 3; +} +.sw5e.sheet.item .details span.sep { + flex: 0 0 8px; +} +.sw5e.sheet.item .details .prepared { + flex: 1.3 !important; + text-align: right; + padding-right: 10px; +} +.sw5e.sheet.item .details .power-materials { + flex: 0 0 100%; + margin: 0.25em 0; + justify-content: flex-end; +} +.sw5e.sheet.item .details .power-materials label { + flex: 0 0 64px; + text-align: right; + margin-right: 5px; + font-size: 12px; + line-height: 24px; +} +.sw5e.sheet.item .details .power-materials input[type="text"] { + flex: 0 0 48px; + margin-right: 10px; +} +.sw5e.sheet.item h4.damage-header { + margin: 0; + padding: 0; + font-weight: bold; + line-height: 24px; + color: #4b4a44; +} +.sw5e.sheet.item .damage-parts { + list-style: none; + margin: 0; + padding: 0; +} +.sw5e.sheet.item .damage-parts .damage-part { + flex: 0 0 100%; + padding: 0; +} +.sw5e.sheet.item .damage-parts .damage-part input { + flex: 3; +} +.sw5e.sheet.item .damage-parts .damage-part select { + margin-left: 5px; + flex: 1; +} +.sw5e.sheet.item .damage-control { + width: 18px; + flex: 0 0 18px; + line-height: 24px; + float: right; + text-align: right; + color: #7a7971; +} + +.sw5e.sheet.item h4.armorproperties-header { + margin: 0; + padding: 0; + font-weight: bold; + line-height: 24px; + color: #4b4a44; +} +.sw5e.sheet.item .armorproperties-parts { + list-style: none; + margin: 0; + padding: 0; +} +.sw5e.sheet.item .armorproperties-parts .armorproperties-part { + flex: 0 0 100%; + padding: 0; +} +.sw5e.sheet.item .armorproperties-parts .armorproperties-part input { + flex: 3; +} +.sw5e.sheet.item .armorproperties-parts .armorproperties-part select { + margin-left: 5px; + flex: 1; +} +.sw5e.sheet.item .armorproperties-control { + width: 18px; + flex: 0 0 18px; + line-height: 24px; + float: right; + text-align: right; + color: #7a7971; + +} + +.sw5e.sheet.item h4.weaponproperties-header { + margin: 0; + padding: 0; + font-weight: bold; + line-height: 24px; + color: #4b4a44; +} +.sw5e.sheet.item .weaponproperties-parts { + list-style: none; + margin: 0; + padding: 0; +} +.sw5e.sheet.item .weaponproperties-parts .weaponproperties-part { + flex: 0 0 100%; + padding: 0; +} +.sw5e.sheet.item .weaponproperties-parts .weaponproperties-part input { + flex: 3; +} +.sw5e.sheet.item .weaponproperties-parts .weaponproperties-part select { + margin-left: 5px; + flex: 1; +} +.sw5e.sheet.item .weaponproperties-control { + width: 18px; + flex: 0 0 18px; + line-height: 24px; + float: right; + text-align: right; + color: #7a7971; +} + +.sw5e.sheet.item .recharge span { + flex: 0 0 80px; +} +.sw5e.sheet.item .recharge label.checkbox { + flex: 0 0 80px; + text-align: right; +} +.sw5e.sheet.item .weapon-properties label.checkbox { + flex: 0 0 98px; +} +.sw5e.sheet.item .loot-header { + margin-bottom: 10px; +} +.sw5e.sheet.item blockquote { + box-sizing: border-box; + font-family: 'Open Sans'; + margin-bottom: 1em; + padding: 5px 10px; + background-color: #bdc8cc; + border: 0px solid #0d99cc; + border-spacing: 0em; + border-image: none; + box-shadow: 0px 0px 20px rgba(13, 153, 204, 0.5); + border-top: 0.1em solid #0d99cc; + border-bottom: 0.1em solid #0d99cc; + border-left: 0.1em solid #0d99cc; + border-right: 0.1em solid #0d99cc; + color: #000000; + font-size: 1em; +} + +.sw5e.sheet.item blockquote h3 { + font-family: 'Russo One'; + color: #000000 !important; +} +/* ----------------------------------------- */ +/* Chat Cards +/* ----------------------------------------- */ +.sw5e.chat-card { + font-style: normal; + font-size: 12px; +} +.sw5e.chat-card .card-header { + padding: 3px 0; + border-top: 2px groove #FFF; + border-bottom: 2px groove #FFF; +} +.sw5e.chat-card .card-header img { + flex: 0 0 36px; + margin-right: 5px; +} +.sw5e.chat-card .card-header h3 { + flex: 1; + margin: 0; + line-height: 36px; + font-family: "Russo One"; + font-size: 10px; + color: #4b4a44; +} +.sw5e.chat-card .card-header h3:hover { + color: #111; + text-shadow: 0 0 10px red; +} +.sw5e.chat-card .card-content { + margin: 5px 0; +} +.sw5e.chat-card .card-content h3 { + font-size: 12px; + margin: 0; + font-weight: bold; +} +.sw5e.chat-card .card-content > * { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} +.sw5e.chat-card .card-buttons { + margin: 5px 0; +} +.sw5e.chat-card .card-buttons span { + display: block; + line-height: 28px; + text-align: center; + border: 1px solid #CCC; +} +.sw5e.chat-card .card-buttons button { + font-size: 12px; + height: 24px; + line-height: 20px; + margin: 2px 0; +} +.sw5e.chat-card .card-footer { + padding: 3px 0 0; + border-top: 2px groove #FFF; +} +.sw5e.chat-card .card-footer span { + border-right: 2px groove #FFF; + padding: 0 3px 0 0; + font-size: 10px; +} +.sw5e.chat-card .card-footer span:last-child { + border-right: none; + padding-right: 0; +} +.dice-roll .dice-total.success { + color: inherit; + background: #c7d0c0; + border: 1px solid #006c00; +} +.dice-roll .dice-total.failure { + color: inherit; + background: #ffdddd; + border: 1px solid #6e0000; +} +.dice-roll .dice-total.critical { + color: green; +} +.dice-roll .dice-total.fumble { + color: red; +} +/* ----------------------------------------- */ +/* Basic Structure */ +/* ----------------------------------------- */ +.sw5e.sheet.actor.character { + min-width: 680px; + min-height: 736px; + /* ----------------------------------------- */ + /* Sheet Header */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Sheet Body */ + /* ----------------------------------------- */ + /* ----------------------------------------- */ + /* Inventory */ + /* ----------------------------------------- */ + /* Encumbrance Bar */ + /* ----------------------------------------- */ + /* Item Controls */ + /* ----------------------------------------- */ +} +.sw5e.sheet.actor.character .sheet-header img.profile { + flex: 0 0 180px; + max-width: 180px; + height: 180px; +} +.sw5e.sheet.actor.character .sheet-header .charlevel { + flex: 0 0 180px; + padding: 0 5px 2px; +} +.sw5e.sheet.actor.character .sheet-header .charlevel .level { + height: 28px; +} +.sw5e.sheet.actor.character .sheet-header .charlevel .experience input[type="text"] { + width: 100px; +} +.sw5e.sheet.actor.character .sheet-header .charlevel .xpbar { + width: 100%; + flex: 0 0 8px; + background: #666; + border: 1px solid #000; + border-radius: 3px; +} +.sw5e.sheet.actor.character .sheet-header .charlevel .xpbar .bar { + height: 4px; + margin: 1px; + display: block; + background: #afebff; + border: 1px solid #000; + border-radius: 2px; +} +.sw5e.sheet.actor.character .sheet-header .summary { + border-bottom: 2px groove #eeede0; +} +.sw5e.sheet.actor.character .sheet-header .attributes { + height: 80px; + margin: 0; +} +.sw5e.sheet.actor.character .sheet-header .attributes .attribute { + height: 80px; + margin: 0; + border: none; + border-right: 2px groove #eeede0; + border-radius: 0; +} +.sw5e.sheet.actor.character .sheet-header .attributes .attribute:last-child { + border-right: none; +} +.sw5e.sheet.actor.character .sheet-header .attributes .attribute .attribute-value { + margin: 5px 0 0; + height: 32px; + line-height: 32px; +} +.sw5e.sheet.actor.character .sheet-header .attributes .attribute .attribute-name { + margin-top: 6px; +} +.sw5e.sheet.actor.character .sheet-header .attributes .attribute .attribute-footer { + margin-bottom: 2px; +} +.sw5e.sheet.actor.character .sheet-header .attributes a.rest { + border: 1px solid #b5b3a4; + border-radius: 2px; + background: rgba(0, 0, 0, 0.05); + padding: 1px 3px; + margin: 0 6px; +} +.sw5e.sheet.actor.character .sheet-header .attributes .hit-dice { + font-size: 16px; +} +.sw5e.sheet.actor.character .attributes .resource .attribute-name { + margin: 0 8px; +} +.sw5e.sheet.actor.character .attributes .resource .attribute-name input[type="text"] { + height: 20px; + margin: 2px 0 -2px; + line-height: 24px; +} +.sw5e.sheet.actor.character .attributes .resource label.checkbox { + margin: 0 3px; +} +.sw5e.sheet.actor.character .attributes .resource label.checkbox input[type="checkbox"] { + transform: scale(1.2); +} +.sw5e.sheet.actor.character .attributes .initiative .attribute-footer input { + width: 32px; +} +.sw5e.sheet.actor.character ul.skills-list { + flex: 0 0 212px; +} +.sw5e.sheet.actor.character ul.skills-list li.skill { + padding: 3px; +} +.sw5e.sheet.actor.character ul.skills-list li.skill h4 { + flex: 1px; + margin: 0; + font-size: 13px; +} +.sw5e.sheet.actor.character .counters .death-saves { + flex: 2; +} +.sw5e.sheet.actor.character .counters .death-saves .counter-value { + flex: 0 0 90px; +} +.sw5e.sheet.actor.character .item-detail.player-class { + flex: 0 0 180px; + text-align: right; + padding-right: 10px; +} +.sw5e.sheet.actor.character .encumbrance { + flex: 0 0 12px; + background: #7a7971; + margin: 1px 15px 0 1px; + border: 1px solid #191813; + border-radius: 3px; + position: relative; +} +.sw5e.sheet.actor.character .encumbrance .encumbrance-bar { + position: absolute; + top: 1px; + left: 1px; + background: #6c8aa5; + height: 8px; + border: 1px solid #cde4ff; + border-radius: 2px; +} +.sw5e.sheet.actor.character .encumbrance .encumbrance-label { + height: 10px; + padding: 0 5px; + position: absolute; + top: 0; + right: 0; + font-size: 13px; + line-height: 12px; + text-align: right; + color: #EEE; + text-shadow: 0 0 5px #000; +} +.sw5e.sheet.actor.character .encumbrance .encumbrance-breakpoint { + display: block; + position: absolute; +} +.sw5e.sheet.actor.character .encumbrance .encumbrance-breakpoint.encumbrance-33 { + left: 33%; +} +.sw5e.sheet.actor.character .encumbrance .encumbrance-breakpoint.encumbrance-66 { + left: 66%; +} +.sw5e.sheet.actor.character .encumbrance .arrow-up { + bottom: 0; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid #666; +} +.sw5e.sheet.actor.character .encumbrance .arrow-down { + top: 0; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #666; +} +.sw5e.sheet.actor.character .encumbrance.encumbered .arrow-up { + border-bottom: 4px solid #000; +} +.sw5e.sheet.actor.character .encumbrance.encumbered .arrow-down { + border-top: 4px solid #000; +} +.sw5e.sheet.actor.character .inventory .item-controls, +.sw5e.sheet.actor.character .powerbook .item-controls { + flex: 0 0 68px; +} +.sw5e.sheet.actor.character .inventory .item-controls .item-toggle, +.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle { + color: #b5b3a4; +} +.sw5e.sheet.actor.character .inventory .item-controls .item-toggle.active, +.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle.active { + color: #4b4a44; +} +.sw5e.sheet.actor.character .inventory .item-controls .item-toggle.fixed, +.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle.fixed { + color: #44191A; +} +.sw5e.sheet.actor.character .inventory .item-controls .item-toggle.fixed:hover, +.sw5e.sheet.actor.character .powerbook .item-controls .item-toggle.fixed:hover { + text-shadow: none; +} +/* ----------------------------------------- */ +/* Basic Structure */ +/* ----------------------------------------- */ +.sw5e.sheet.actor.npc { + min-width: 800px; + min-height: 658px; +} +/* ----------------------------------------- */ +/* Journal Entry +/* ----------------------------------------- */ +.journal-sheet .window-content { + padding: 0; + background: url("ui/parchment.webp") repeat; +} +.journal-sheet form { + overflow: hidden; + padding: 5px; + font-family: "Open Sans"; + background: url("ui/parchment.webp") repeat; +} +.journal-sheet form h2 { + font-family: "Russo One"; + font-size: 18px; + text-transform: uppercase; + color: #c40f0f; +} + +.journal-sheet form input[name="name"] { + height: 36px; + font-family: "Russo One"; + font-size: 24px; + text-transform: uppercase; + color: #c40f0f; + line-height: 36px; +} +.journal-sheet form select { + width: 100%; + height: 30px; + margin: 5px 0; +} +.journal-sheet form .editor { + height: calc(100% - 115px); +} +.journal-sheet form button[type="submit"] { + margin-top: 5px; +} +.journal-sheet form img { + border: none +} +.journal-sheet form table { + border: none; + background-color: none; +} +/* ---------------------------------------- */ +/* Roll Table Sheet */ +/* ---------------------------------------- */ +.roll-table-config .window-content { + background: url("ui/parchment.webp") repeat; +} +.roll-table-config form { + background: url("ui/parchment.webp") repeat; +} +.roll-table-config h1.name input { + width: 100%; + height: 36px; + margin: 0 0 5px; + font-family: "Russo One"; + font-size: 24px; + text-transform: uppercase; + color: #c40f0f; +} +.roll-table-config textarea { + resize: none; + min-height: 44px; + font-family: "Open Sans"; + background: url("ui/parchment.webp") repeat; +} +.roll-table-config ol.table-results { + list-style: none; + margin: 0; + padding: 0; + max-height: 600px; + overflow-y: auto; +} +.roll-table-config ol.table-results .table-result { + padding: 2px 0; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +.roll-table-config ol.table-results .table-result input[type="text"] { + width: 100%; + height: 28px; +} +.roll-table-config ol.table-results .table-result > div { + line-height: 36px; + margin-right: 5px; +} +.roll-table-config ol.table-results .table-result .result-image { + flex: 0 0 36px; + width: 36px; + height: 36px; + text-align: center; + margin: 0; +} +.roll-table-config ol.table-results .table-result .result-image img { + border: none; + object-fit: cover; + object-position: 50% 0; +} +.roll-table-config ol.table-results .table-result .result-type { + flex: 0 0 110px; +} +.roll-table-config ol.table-results .table-result .result-details { + flex: 1; +} +.roll-table-config ol.table-results .table-result .result-details select { + width: 40%; +} +.roll-table-config ol.table-results .table-result .result-details .result-target { + width: 58%; + margin-left: 3px; +} +.roll-table-config ol.table-results .table-result .result-weight { + flex: 0 0 50px; + text-align: center; +} +.roll-table-config ol.table-results .table-result .result-range { + flex: 0 0 92px; + text-align: center; +} +.roll-table-config ol.table-results .table-result .result-range input { + width: 36px; +} +.roll-table-config ol.table-results .table-result .result-controls { + flex: 0 0 40px; + margin: 0; + text-align: center; +} +.roll-table-config ol.table-results .table-result .result-controls a { + width: 20px; +} +.roll-table-config ol.table-results .table-result .result-controls .lock-result { + color: #b5b3a4; +} +.roll-table-config ol.table-results .table-result.roulette { + background: url("ui/parchment.webp") repeat; + border-top: 1px solid #000; + border-bottom: 1px solid #000; +} +.roll-table-config ol.table-results .table-result.drawn { + background: rgba(0, 0, 0, 0.15); +} +.roll-table-config ol.table-results .table-result.drawn .lock-result { + color: #111; +} +.roll-table-config ol.table-results .table-header { + background: url("ui/parchment.webp") repeat; + border: 1px solid #7a7971; + line-height: 24px; + font-weight: bold; +} +.icon:before { + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; +} +a.entity-link { + background: #DDD; + padding: 1px 4px; + border: 1px solid #4b4a44; + border-radius: 2px; + white-space: nowrap; + word-break: break-all; +} +a.entity-link i::before { + content: url("ui/jedi-order.svg") !important; + display: inline-block; + position: relative; + top: 2px; + height: 15px; + width: 15px; +} diff --git a/sw5e-dark.css b/sw5e-dark.css index ea2714f0..dfc9cdf7 100644 --- a/sw5e-dark.css +++ b/sw5e-dark.css @@ -234,13 +234,14 @@ body.dark-theme .dice-roll .dice-total.fumble { box-shadow: 0 0 12px rgba(232, 17, 17, 0.5); } body.dark-theme #chat-controls .roll-type-select { - background: #363636; + background: #4f4f4f; + color: #FFFFFF; } body.dark-theme #chat-controls label { color: white; } body.dark-theme #chat-form textarea { - background: #363636; + background: #4f4f4f; } body.dark-theme #combat #combat-round { color: #E81111; diff --git a/sw5e-global.css b/sw5e-global.css index a54ef3d5..a9023252 100644 --- a/sw5e-global.css +++ b/sw5e-global.css @@ -54,11 +54,6 @@ font-weight: 400; src: url('./fonts/EngliBesh-KG3W.ttf'); } -.engli-Besh { - font-family: 'Engli-Besh'; - font-size: 20px; - font-weight: 400; -} /* ----------------------------------------- */ /* Fonts */ /* ----------------------------------------- */ @@ -768,7 +763,7 @@ input[type="reset"]:disabled { grid-template-rows: 1fr 26px auto; grid-template-columns: 128px 1fr; column-gap: 8px; - row-gap: 8px; + grid-row-gap: 8px; } .sw5e.sheet.actor .swalt-sheet header img { grid-column-start: 1; @@ -1390,7 +1385,7 @@ input[type="reset"]:disabled { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 4px; - row-gap: 4px; + grid-row-gap: 4px; } .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.traits ul.passives strong { font-size: 13px; @@ -1601,7 +1596,7 @@ input[type="reset"]:disabled { } .sw5e.sheet.actor .swalt-sheet.limited { grid-template-rows: 144px auto; - row-gap: 8px; + grid-row-gap: 8px; } .sw5e.sheet.actor .swalt-sheet.limited header { grid-template-rows: 1fr; diff --git a/sw5e.css b/sw5e.css index 98dde4b5..11a330c5 100644 --- a/sw5e.css +++ b/sw5e.css @@ -508,6 +508,41 @@ height: 24px; margin: 2px; } +/* ----------------------------------------- */ +/* HUD +/* ----------------------------------------- */ +.placeable-hud .control-icon { + box-sizing: content-box; + width: 40px; + flex: 0 0 40px; + margin: 8px 0; + font-size: 28px; + line-height: 40px; + text-align: center; + color: #FBF4F4; + background: rgba(0, 0, 0, 0.6); + box-shadow: 0 0 15px #000; + border: 1px solid #333; + border-radius: 8px; + pointer-events: all; +} +#token-hud .status-effects { + visibility: hidden; + position: absolute; + left: 50px; + top: 0; + display: grid; + padding: 3px; + box-sizing: content-box; + width: 100px; + color: #FBF4F4; + grid-template-columns: 25px 25px 25px 25px; + background: rgba(0, 0, 0, 0.6); + box-shadow: 0 0 15px #000; + border: 1px solid #333; + border-radius: 4px; + pointer-events: all; +} .sw5e.sheet.actor { /* ----------------------------------------- */ /* Sheet Header */ @@ -1557,7 +1592,7 @@ flex: 1; margin: 0; line-height: 36px; - font-family: 'Bungee Inline'; + font-family: 'Engli-Besh'; font-size: 20px; font-weight: 400; color: #4b4a44; @@ -1837,35 +1872,3 @@ max-width: 40px; text-align: right; } -.placeable-hud .control-icon { - box-sizing: content-box; - width: 40px; - flex: 0 0 40px; - margin: 8px 0; - font-size: 28px; - line-height: 40px; - text-align: center; - color: #FBF4F4; - background: rgba(0, 0, 0, 0.6); - box-shadow: 0 0 15px #000; - border: 1px solid #333; - border-radius: 8px; - pointer-events: all; -} -#token-hud .status-effects { - visibility: hidden; - position: absolute; - left: 50px; - top: 0; - display: grid; - padding: 3px; - box-sizing: content-box; - width: 100px; - color: #FBF4F4; - grid-template-columns: 25px 25px 25px 25px; - background: rgba(0, 0, 0, 0.6); - box-shadow: 0 0 15px #000; - border: 1px solid #333; - border-radius: 4px; - pointer-events: all; -} diff --git a/sw5e.js b/sw5e.js index bdbfb497..a8abd476 100644 --- a/sw5e.js +++ b/sw5e.js @@ -1,270 +1,279 @@ -/** - * The Star Wars 5th Edition game system for Foundry Virtual Tabletop - * Author: Kakeman89 - * Software License: GNU GPLv3 - * Content License: https://media.wizards.com/2016/downloads/SW5E/SRD-OGL_V5.1.pdf - * Repository: https://gitlab.com/foundrynet/sw5e - * Issue Tracker: https://gitlab.com/foundrynet/sw5e/issues - */ - -// Import Modules -import { SW5E } from "./module/config.js"; -import { registerSystemSettings } from "./module/settings.js"; -import { preloadHandlebarsTemplates } from "./module/templates.js"; -import { _getInitiativeFormula } from "./module/combat.js"; -import { measureDistances, getBarAttribute } from "./module/canvas.js"; - -// Import Entities -import Actor5e from "./module/actor/entity.js"; -import Item5e from "./module/item/entity.js"; - -// Import Applications -import AbilityTemplate from "./module/pixi/ability-template.js"; -import AbilityUseDialog from "./module/apps/ability-use-dialog.js"; -import ActorSheetFlags from "./module/apps/actor-flags.js"; -import ActorSheet5eCharacter from "./module/actor/sheets/oldSheets/character.js"; -import ActorSheet5eNPC from "./module/actor/sheets/oldSheets/npc.js"; -import ActorSheet5eVehicle from "./module/actor/sheets/oldSheets/vehicle.js"; -import ActorSheet5eCharacterNew from "./module/actor/sheets/newSheet/character.js"; -import ItemSheet5e from "./module/item/sheet.js"; -import ShortRestDialog from "./module/apps/short-rest.js"; -import TraitSelector from "./module/apps/trait-selector.js"; -import ActorMovementConfig from "./module/apps/movement-config.js"; -import ActorSensesConfig from "./module/apps/senses-config.js"; - -// Import Helpers -import * as chat from "./module/chat.js"; -import * as dice from "./module/dice.js"; -import * as macros from "./module/macros.js"; -import * as migrations from "./module/migration.js"; - -/* -------------------------------------------- */ -/* Foundry VTT Initialization */ -/* -------------------------------------------- */ - -Hooks.once("init", function() { - console.log(`SW5e | Initializing SW5E System\n${SW5E.ASCII}`); - - // Create a SW5E namespace within the game global - game.sw5e = { - applications: { - AbilityUseDialog, - ActorSheetFlags, - ActorSheet5eCharacter, - ActorSheet5eCharacterNew, - ActorSheet5eNPC, - ActorSheet5eVehicle, - ItemSheet5e, - ShortRestDialog, - TraitSelector, - ActorMovementConfig - }, - canvas: { - AbilityTemplate - }, - config: SW5E, - dice: dice, - entities: { - Actor5e, - Item5e, - }, - macros: macros, - migrations: migrations, - rollItemMacro: macros.rollItemMacro - }; - - // Record Configuration Values - CONFIG.SW5E = SW5E; - CONFIG.Actor.entityClass = Actor5e; - CONFIG.Item.entityClass = Item5e; - CONFIG.time.roundTime = 6; - CONFIG.fontFamilies = [ - "Engli-Besh", - "Open Sans", - "Russo One" - ]; - - // 5e cone RAW should be 53.13 degrees - CONFIG.MeasuredTemplate.defaults.angle = 53.13; - - // Add DND5e namespace for module compatability - game.dnd5e = game.sw5e; - CONFIG.DND5E = CONFIG.SW5E; - - // Register System Settings - registerSystemSettings(); - - // Patch Core Functions - CONFIG.Combat.initiative.formula = "1d20 + @attributes.init.mod + @attributes.init.prof + @attributes.init.bonus"; - Combat.prototype._getInitiativeFormula = _getInitiativeFormula; - - // Register sheet application classes - Actors.unregisterSheet("core", ActorSheet); - Actors.registerSheet("sw5e", ActorSheet5eCharacterNew, { - types: ["character"], - makeDefault: true, - label: "SW5E.SheetClassCharacter" - }); - Actors.registerSheet("sw5e", ActorSheet5eCharacter, { - types: ["character"], - makeDefault: false, - label: "SW5E.SheetClassCharacterOld" - }); - Actors.registerSheet("sw5e", ActorSheet5eNPC, { - types: ["npc"], - makeDefault: true, - label: "SW5E.SheetClassNPC" - }); - Actors.registerSheet('sw5e', ActorSheet5eVehicle, { - types: ['vehicle'], - makeDefault: true, - label: "SW5E.SheetClassVehicle" - }); - Items.unregisterSheet("core", ItemSheet); - Items.registerSheet("sw5e", ItemSheet5e, { - types: ['weapon', 'equipment', 'consumable', 'tool', 'loot', 'class', 'power', 'feat', 'species', 'backpack', 'archetype', 'classfeature', 'background', 'fightingmastery', 'fightingstyle', 'lightsaberform'], - makeDefault: true, - label: "SW5E.SheetClassItem" - }); - - // Preload Handlebars Templates - preloadHandlebarsTemplates(); -}); - - -/* -------------------------------------------- */ -/* Foundry VTT Setup */ -/* -------------------------------------------- */ - -/** - * This function runs after game data has been requested and loaded from the servers, so entities exist - */ -Hooks.once("setup", function() { - - // Localize CONFIG objects once up-front - const toLocalize = [ - "abilities", "abilityAbbreviations", "abilityActivationTypes", "abilityConsumptionTypes", "actorSizes", "alignments", - "armorProficiencies", "armorPropertiesTypes", "conditionTypes", "consumableTypes", "cover", "currencies", "damageResistanceTypes", - "damageTypes", "distanceUnits", "equipmentTypes", "healingTypes", "itemActionTypes", "languages", - "limitedUsePeriods", "movementTypes", "movementUnits", "polymorphSettings", "proficiencyLevels", "senses", "skills", - "powerComponents", "powerLevels", "powerPreparationModes", "powerScalingModes", "powerSchools", "targetTypes", - "timePeriods", "toolProficiencies", "weaponProficiencies", "weaponProperties", "weaponTypes" - ]; - - // Exclude some from sorting where the default order matters - const noSort = [ - "abilities", "alignments", "currencies", "distanceUnits", "movementUnits", "itemActionTypes", "proficiencyLevels", - "limitedUsePeriods", "powerComponents", "powerLevels", "powerPreparationModes", "weaponTypes" - ]; - - // Localize and sort CONFIG objects - for ( let o of toLocalize ) { - const localized = Object.entries(CONFIG.SW5E[o]).map(e => { - return [e[0], game.i18n.localize(e[1])]; - }); - if ( !noSort.includes(o) ) localized.sort((a, b) => a[1].localeCompare(b[1])); - CONFIG.SW5E[o] = localized.reduce((obj, e) => { - obj[e[0]] = e[1]; - return obj; - }, {}); - } - // add DND5E translation for module compatability - game.i18n.translations.DND5E = game.i18n.translations.SW5E; - // console.log(game.settings.get("sw5e", "colorTheme")); - let theme = game.settings.get("sw5e", "colorTheme") + '-theme'; - document.body.classList.add(theme); -}); - -/* -------------------------------------------- */ - -/** - * Once the entire VTT framework is initialized, check to see if we should perform a data migration - */ -Hooks.once("ready", function() { - - // Wait to register hotbar drop hook on ready so that modules could register earlier if they want to - Hooks.on("hotbarDrop", (bar, data, slot) => macros.create5eMacro(data, slot)); - - // Determine whether a system migration is required and feasible - if ( !game.user.isGM ) return; - const currentVersion = game.settings.get("sw5e", "systemMigrationVersion"); - const NEEDS_MIGRATION_VERSION = "1.2.1"; - const COMPATIBLE_MIGRATION_VERSION = 0.80; - const needsMigration = currentVersion && isNewerVersion(NEEDS_MIGRATION_VERSION, currentVersion); - if ( !needsMigration ) return; - - // Perform the migration - if ( currentVersion && isNewerVersion(COMPATIBLE_MIGRATION_VERSION, currentVersion) ) { - const warning = `Your SW5e system data is from too old a Foundry version and cannot be reliably migrated to the latest version. The process will be attempted, but errors may occur.`; - ui.notifications.error(warning, {permanent: true}); - } - migrations.migrateWorld(); -}); - -/* -------------------------------------------- */ -/* Canvas Initialization */ -/* -------------------------------------------- */ - -Hooks.on("canvasInit", function() { - - // Extend Diagonal Measurement - canvas.grid.diagonalRule = game.settings.get("sw5e", "diagonalMovement"); - SquareGrid.prototype.measureDistances = measureDistances; - - // Extend Token Resource Bars - Token.prototype.getBarAttribute = getBarAttribute; -}); - - -/* -------------------------------------------- */ -/* Other Hooks */ -/* -------------------------------------------- */ - -Hooks.on("renderChatMessage", (app, html, data) => { - - // Display action buttons - chat.displayChatActionButtons(app, html, data); - - // Highlight critical success or failure die - chat.highlightCriticalSuccessFailure(app, html, data); - - // Optionally collapse the content - if (game.settings.get("sw5e", "autoCollapseItemCards")) html.find(".card-content").hide(); -}); -Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions); -Hooks.on("renderChatLog", (app, html, data) => Item5e.chatListeners(html)); -Hooks.on("renderChatPopout", (app, html, data) => Item5e.chatListeners(html)); -Hooks.on('getActorDirectoryEntryContext', Actor5e.addDirectoryContextOptions); -Hooks.on("renderSceneDirectory", (app, html, data)=> { - //console.log(html.find("header.folder-header")); - setFolderBackground(html); -}); -Hooks.on("renderActorDirectory", (app, html, data)=> { - setFolderBackground(html); -}); -Hooks.on("renderItemDirectory", (app, html, data)=> { - setFolderBackground(html); -}); -Hooks.on("renderJournalDirectory", (app, html, data)=> { - setFolderBackground(html); -}); -Hooks.on("renderRollTableDirectory", (app, html, data)=> { - setFolderBackground(html); -}); -Hooks.on("ActorSheet5eCharacterNew", (app, html, data) => { - console.log("renderSwaltSheet"); -}); -// TODO I should remove this -Handlebars.registerHelper('getProperty', function (data, property) { - return getProperty(data, property); -}); - - -function setFolderBackground(html) { - html.find("header.folder-header").each(function() { - let bgColor = $(this).css("background-color"); - if(bgColor == undefined) - bgColor = "rgb(255,255,255)"; - $(this).closest('li').css("background-color", bgColor); - }) +/** + * The Star Wars 5th Edition game system for Foundry Virtual Tabletop + * Author: Kakeman89 + * Software License: GNU GPLv3 + * Content License: https://media.wizards.com/2016/downloads/SW5E/SRD-OGL_V5.1.pdf + * Repository: https://gitlab.com/foundrynet/sw5e + * Issue Tracker: https://gitlab.com/foundrynet/sw5e/issues + */ + +// Import Modules +import { SW5E } from "./module/config.js"; +import { registerSystemSettings } from "./module/settings.js"; +import { preloadHandlebarsTemplates } from "./module/templates.js"; +import { _getInitiativeFormula } from "./module/combat.js"; +import { measureDistances, getBarAttribute } from "./module/canvas.js"; + +// Import Entities +import Actor5e from "./module/actor/entity.js"; +import Item5e from "./module/item/entity.js"; +import CharacterImporter from "./module/characterImporter.js"; + +// Import Applications +import AbilityTemplate from "./module/pixi/ability-template.js"; +import AbilityUseDialog from "./module/apps/ability-use-dialog.js"; +import ActorSheetFlags from "./module/apps/actor-flags.js"; +import ActorSheet5eCharacter from "./module/actor/sheets/oldSheets/character.js"; +import ActorSheet5eNPC from "./module/actor/sheets/oldSheets/npc.js"; +import ActorSheet5eVehicle from "./module/actor/sheets/oldSheets/vehicle.js"; +import ActorSheet5eCharacterNew from "./module/actor/sheets/newSheet/character.js"; +import ActorSheet5eNPCNew from "./module/actor/sheets/newSheet/npc.js"; +import ItemSheet5e from "./module/item/sheet.js"; +import ShortRestDialog from "./module/apps/short-rest.js"; +import TraitSelector from "./module/apps/trait-selector.js"; +import ActorMovementConfig from "./module/apps/movement-config.js"; +import ActorSensesConfig from "./module/apps/senses-config.js"; + +// Import Helpers +import * as chat from "./module/chat.js"; +import * as dice from "./module/dice.js"; +import * as macros from "./module/macros.js"; +import * as migrations from "./module/migration.js"; + +/* -------------------------------------------- */ +/* Foundry VTT Initialization */ +/* -------------------------------------------- */ + +Hooks.once("init", function() { + console.log(`SW5e | Initializing SW5E System\n${SW5E.ASCII}`); + + // Create a SW5E namespace within the game global + game.sw5e = { + applications: { + AbilityUseDialog, + ActorSheetFlags, + ActorSheet5eCharacter, + ActorSheet5eCharacterNew, + ActorSheet5eNPC, + ActorSheet5eNPCNew, + ActorSheet5eVehicle, + ItemSheet5e, + ShortRestDialog, + TraitSelector, + ActorMovementConfig + }, + canvas: { + AbilityTemplate + }, + config: SW5E, + dice: dice, + entities: { + Actor5e, + Item5e, + }, + macros: macros, + migrations: migrations, + rollItemMacro: macros.rollItemMacro + }; + + // Record Configuration Values + CONFIG.SW5E = SW5E; + CONFIG.Actor.entityClass = Actor5e; + CONFIG.Item.entityClass = Item5e; + CONFIG.time.roundTime = 6; + CONFIG.fontFamilies = [ + "Engli-Besh", + "Open Sans", + "Russo One" + ]; + + // 5e cone RAW should be 53.13 degrees + CONFIG.MeasuredTemplate.defaults.angle = 53.13; + + // Add DND5e namespace for module compatability + game.dnd5e = game.sw5e; + CONFIG.DND5E = CONFIG.SW5E; + + // Register System Settings + registerSystemSettings(); + + // Patch Core Functions + CONFIG.Combat.initiative.formula = "1d20 + @attributes.init.mod + @attributes.init.prof + @attributes.init.bonus"; + Combat.prototype._getInitiativeFormula = _getInitiativeFormula; + + // Register sheet application classes + Actors.unregisterSheet("core", ActorSheet); + Actors.registerSheet("sw5e", ActorSheet5eCharacterNew, { + types: ["character"], + makeDefault: true, + label: "SW5E.SheetClassCharacter" + }); + Actors.registerSheet("sw5e", ActorSheet5eCharacter, { + types: ["character"], + makeDefault: false, + label: "SW5E.SheetClassCharacterOld" + }); + Actors.registerSheet("sw5e", ActorSheet5eNPCNew, { + types: ["npc"], + makeDefault: true, + label: "SW5E.SheetClassNPC" + }); + Actors.registerSheet("sw5e", ActorSheet5eNPC, { + types: ["npc"], + makeDefault: false, + label: "SW5E.SheetClassNPCOld" + }); + Actors.registerSheet('sw5e', ActorSheet5eVehicle, { + types: ['vehicle'], + makeDefault: true, + label: "SW5E.SheetClassVehicle" + }); + Items.unregisterSheet("core", ItemSheet); + Items.registerSheet("sw5e", ItemSheet5e, { + types: ['weapon', 'equipment', 'consumable', 'tool', 'loot', 'class', 'power', 'feat', 'species', 'backpack', 'archetype', 'classfeature', 'background', 'fightingmastery', 'fightingstyle', 'lightsaberform'], + makeDefault: true, + label: "SW5E.SheetClassItem" + }); + + // Preload Handlebars Templates + preloadHandlebarsTemplates(); +}); + + +/* -------------------------------------------- */ +/* Foundry VTT Setup */ +/* -------------------------------------------- */ + +/** + * This function runs after game data has been requested and loaded from the servers, so entities exist + */ +Hooks.once("setup", function() { + + // Localize CONFIG objects once up-front + const toLocalize = [ + "abilities", "abilityAbbreviations", "abilityActivationTypes", "abilityConsumptionTypes", "actorSizes", "alignments", + "armorProficiencies", "armorPropertiesTypes", "conditionTypes", "consumableTypes", "cover", "currencies", "damageResistanceTypes", + "damageTypes", "distanceUnits", "equipmentTypes", "healingTypes", "itemActionTypes", "languages", + "limitedUsePeriods", "movementTypes", "movementUnits", "polymorphSettings", "proficiencyLevels", "senses", "skills", + "powerComponents", "powerLevels", "powerPreparationModes", "powerScalingModes", "powerSchools", "targetTypes", + "timePeriods", "toolProficiencies", "weaponProficiencies", "weaponProperties", "weaponTypes" + ]; + + // Exclude some from sorting where the default order matters + const noSort = [ + "abilities", "alignments", "currencies", "distanceUnits", "movementUnits", "itemActionTypes", "proficiencyLevels", + "limitedUsePeriods", "powerComponents", "powerLevels", "powerPreparationModes", "weaponTypes" + ]; + + // Localize and sort CONFIG objects + for ( let o of toLocalize ) { + const localized = Object.entries(CONFIG.SW5E[o]).map(e => { + return [e[0], game.i18n.localize(e[1])]; + }); + if ( !noSort.includes(o) ) localized.sort((a, b) => a[1].localeCompare(b[1])); + CONFIG.SW5E[o] = localized.reduce((obj, e) => { + obj[e[0]] = e[1]; + return obj; + }, {}); + } + // add DND5E translation for module compatability + game.i18n.translations.DND5E = game.i18n.translations.SW5E; + // console.log(game.settings.get("sw5e", "colorTheme")); + let theme = game.settings.get("sw5e", "colorTheme") + '-theme'; + document.body.classList.add(theme); +}); + +/* -------------------------------------------- */ + +/** + * Once the entire VTT framework is initialized, check to see if we should perform a data migration + */ +Hooks.once("ready", function() { + + // Wait to register hotbar drop hook on ready so that modules could register earlier if they want to + Hooks.on("hotbarDrop", (bar, data, slot) => macros.create5eMacro(data, slot)); + + // Determine whether a system migration is required and feasible + if ( !game.user.isGM ) return; + const currentVersion = game.settings.get("sw5e", "systemMigrationVersion"); + const NEEDS_MIGRATION_VERSION = "1.2.1"; + const COMPATIBLE_MIGRATION_VERSION = 0.80; + const needsMigration = currentVersion && isNewerVersion(NEEDS_MIGRATION_VERSION, currentVersion); + if ( !needsMigration ) return; + + // Perform the migration + if ( currentVersion && isNewerVersion(COMPATIBLE_MIGRATION_VERSION, currentVersion) ) { + const warning = `Your SW5e system data is from too old a Foundry version and cannot be reliably migrated to the latest version. The process will be attempted, but errors may occur.`; + ui.notifications.error(warning, {permanent: true}); + } + migrations.migrateWorld(); +}); + +/* -------------------------------------------- */ +/* Canvas Initialization */ +/* -------------------------------------------- */ + +Hooks.on("canvasInit", function() { + + // Extend Diagonal Measurement + canvas.grid.diagonalRule = game.settings.get("sw5e", "diagonalMovement"); + SquareGrid.prototype.measureDistances = measureDistances; + + // Extend Token Resource Bars + Token.prototype.getBarAttribute = getBarAttribute; +}); + + +/* -------------------------------------------- */ +/* Other Hooks */ +/* -------------------------------------------- */ + +Hooks.on("renderChatMessage", (app, html, data) => { + + // Display action buttons + chat.displayChatActionButtons(app, html, data); + + // Highlight critical success or failure die + chat.highlightCriticalSuccessFailure(app, html, data); + + // Optionally collapse the content + if (game.settings.get("sw5e", "autoCollapseItemCards")) html.find(".card-content").hide(); +}); +Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions); +Hooks.on("renderChatLog", (app, html, data) => Item5e.chatListeners(html)); +Hooks.on("renderChatPopout", (app, html, data) => Item5e.chatListeners(html)); +Hooks.on('getActorDirectoryEntryContext', Actor5e.addDirectoryContextOptions); +Hooks.on("renderSceneDirectory", (app, html, data)=> { + //console.log(html.find("header.folder-header")); + setFolderBackground(html); +}); +Hooks.on("renderActorDirectory", (app, html, data)=> { + setFolderBackground(html); + CharacterImporter.addImportButton(html); +}); +Hooks.on("renderItemDirectory", (app, html, data)=> { + setFolderBackground(html); +}); +Hooks.on("renderJournalDirectory", (app, html, data)=> { + setFolderBackground(html); +}); +Hooks.on("renderRollTableDirectory", (app, html, data)=> { + setFolderBackground(html); +}); +Hooks.on("ActorSheet5eCharacterNew", (app, html, data) => { + console.log("renderSwaltSheet"); +}); +// TODO I should remove this +Handlebars.registerHelper('getProperty', function (data, property) { + return getProperty(data, property); +}); + + +function setFolderBackground(html) { + html.find("header.folder-header").each(function() { + let bgColor = $(this).css("background-color"); + if(bgColor == undefined) + bgColor = "rgb(255,255,255)"; + $(this).closest('li').css("background-color", bgColor); + }) } \ No newline at end of file diff --git a/system.json b/system.json index daa334a3..e8d690cd 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "name": "sw5e", "title": "SW 5th Edition", "description": "A comprehensive game system for running games of SW 5th Edition in the Foundry VTT environment.", - "version": "1.2.2", + "version": "R1-A2", "author": "Dev Team", "scripts": [], "esmodules": ["sw5e.js"], @@ -135,8 +135,8 @@ "gridUnits": "ft", "primaryTokenAttribute": "attributes.hp", "secondaryTokenAttribute": null, - "minimumCoreVersion": "0.7.6", - "compatibleCoreVersion": "0.7.7", + "minimumCoreVersion": "0.7.7", + "compatibleCoreVersion": "0.7.9", "url": "https://github.com/unrealkakeman89/sw5e", "manifest": "https://raw.githubusercontent.com/unrealkakeman89/sw5e/master/system.json", "download": "https://github.com/unrealkakeman89/sw5e/archive/master.zip" diff --git a/templates/actors/newActor/parts/swalt-biography.html b/templates/actors/newActor/parts/swalt-biography.html index 8546d812..4330cc7e 100644 --- a/templates/actors/newActor/parts/swalt-biography.html +++ b/templates/actors/newActor/parts/swalt-biography.html @@ -1,22 +1,22 @@ -
-

Personality Traits

- {{editor content=data.details.trait target="data.details.trait" button=true owner=owner editable=editable}} -
-

Ideals

- {{editor content=data.details.ideal target="data.details.ideal" button=true owner=owner editable=editable}} -
-

Bonds

- {{editor content=data.details.bond target="data.details.bond" button=true owner=owner editable=editable}} -
-

Flaws

- {{editor content=data.details.flaw target="data.details.flaw" button=true owner=owner editable=editable}} -
-
-
-

Description

- {{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}} -
-

Background

- {{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}} -
+
+

Personality Traits

+ {{editor content=data.details.trait target="data.details.trait" button=true owner=owner editable=editable}} +
+

Ideals

+ {{editor content=data.details.ideal target="data.details.ideal" button=true owner=owner editable=editable}} +
+

Bonds

+ {{editor content=data.details.bond target="data.details.bond" button=true owner=owner editable=editable}} +
+

Flaws

+ {{editor content=data.details.flaw target="data.details.flaw" button=true owner=owner editable=editable}} +
+
+
+

Description

+ {{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}} +
+

Background

+ {{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}} +
\ No newline at end of file diff --git a/templates/actors/newActor/parts/swalt-notes.html b/templates/actors/newActor/parts/swalt-notes.html index 0ffe27df..1ba8f7af 100644 --- a/templates/actors/newActor/parts/swalt-notes.html +++ b/templates/actors/newActor/parts/swalt-notes.html @@ -1,33 +1,33 @@ -
-
- - - {{editor content=data.details.notes.value target="data.details.notes.value" button=true owner=owner editable=editable}} -
-
- - {{editor content=data.details.notes1.value target="data.details.notes1.value" button=true owner=owner editable=editable}} -
- -
- - {{editor content=data.details.notes2.value target="data.details.notes2.value" button=true owner=owner editable=editable}} -
- -
- - {{editor content=data.details.notes3.value target="data.details.notes3.value" button=true owner=owner editable=editable}} -
- -
- - {{editor content=data.details.notes4.value target="data.details.notes4.value" button=true owner=owner editable=editable}} -
- - +
+
+ + + {{editor content=data.details.notes.value target="data.details.notes.value" button=true owner=owner editable=editable}} +
+
+ + {{editor content=data.details.notes1.value target="data.details.notes1.value" button=true owner=owner editable=editable}} +
+ +
+ + {{editor content=data.details.notes2.value target="data.details.notes2.value" button=true owner=owner editable=editable}} +
+ +
+ + {{editor content=data.details.notes3.value target="data.details.notes3.value" button=true owner=owner editable=editable}} +
+ +
+ + {{editor content=data.details.notes4.value target="data.details.notes4.value" button=true owner=owner editable=editable}} +
+ +
\ No newline at end of file diff --git a/templates/actors/newActor/parts/swalt-traits.html b/templates/actors/newActor/parts/swalt-traits.html index e8a0170b..efb281a0 100644 --- a/templates/actors/newActor/parts/swalt-traits.html +++ b/templates/actors/newActor/parts/swalt-traits.html @@ -29,7 +29,7 @@
-

{{ localize "SW5E.DeathSave" }}

+

{{ localize "SW5E.DeathSave" }}

diff --git a/templates/app-window.html b/templates/app-window.html index 23d749c4..c7cff7a8 100644 --- a/templates/app-window.html +++ b/templates/app-window.html @@ -1,11 +1,11 @@ -
-
-

{{title}}

- {{#each headerButtons}} - - {{/each}} -
- -
-
+
+
+

{{title}}

+ {{#each headerButtons}} + + {{/each}} +
+ +
+
\ No newline at end of file