forked from GitHub-Mirrors/foundry-sw5e
Merge branch 'Develop' into professorbunbury-sw5e
This commit is contained in:
commit
08a5c0be33
41 changed files with 6024 additions and 5848 deletions
BIN
.DS_Store
vendored
Normal file
BIN
.DS_Store
vendored
Normal file
Binary file not shown.
8
CONTRIBUTIONS.md
Normal file
8
CONTRIBUTIONS.md
Normal file
|
@ -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)
|
|
@ -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
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
flex: 1;
|
||||
margin: 0;
|
||||
line-height: 36px;
|
||||
.bungeeInline();
|
||||
.engli-Besh();
|
||||
color: @colorOlive;
|
||||
&:hover {
|
||||
color: #111;
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
File diff suppressed because it is too large
Load diff
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
|
@ -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";
|
|
@ -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);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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]
|
||||
});
|
||||
}
|
||||
|
||||
|
|
121
module/characterImporter.js
Normal file
121
module/characterImporter.js
Normal file
|
@ -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("<button class='create-entity' id='cs-import-button'><i class='fas fa-upload'></i> Import Character</button>");
|
||||
newSearch.appendTo(header);
|
||||
|
||||
let characterImportButton = $("#cs-import-button");
|
||||
characterImportButton.click(ev => {
|
||||
let content = '<h1>Saved Character JSON Import</h1> '
|
||||
+ '<label for="character-json">Paste character JSON here:</label> '
|
||||
+ '</br>'
|
||||
+ '<textarea id="character-json" name="character-json" rows="10" cols="50"></textarea>';
|
||||
let importDialog = new Dialog({
|
||||
title: "Import Character from SW5e.com",
|
||||
content: content,
|
||||
buttons: {
|
||||
"Import": {
|
||||
icon: '<i class="fas fa-file-import"></i>',
|
||||
label: "Import Character",
|
||||
callback: (e) => {
|
||||
let characterData = $('#character-json').val();
|
||||
console.log('Parsing Character JSON');
|
||||
CharacterImporter.transform(characterData);
|
||||
}
|
||||
},
|
||||
"Cancel": {
|
||||
icon: '<i class="fas fa-times-circle"></i>',
|
||||
label: "Cancel",
|
||||
callback: () => {},
|
||||
}
|
||||
}
|
||||
})
|
||||
importDialog.render(true);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
3578
sw5e copy.css
3578
sw5e copy.css
File diff suppressed because it is too large
Load diff
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
69
sw5e.css
69
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;
|
||||
}
|
||||
|
|
547
sw5e.js
547
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);
|
||||
})
|
||||
}
|
|
@ -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"
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
<div class="panel additional-info">
|
||||
<section><h1 class="section-titles biopage">Personality Traits</h1>
|
||||
{{editor content=data.details.trait target="data.details.trait" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles biopage">Ideals</h1>
|
||||
{{editor content=data.details.ideal target="data.details.ideal" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles biopage">Bonds</h1>
|
||||
{{editor content=data.details.bond target="data.details.bond" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles biopage">Flaws</h1>
|
||||
{{editor content=data.details.flaw target="data.details.flaw" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
</div>
|
||||
<div class="panel background">
|
||||
<section><h1 class="section-titles biopage">Description</h1>
|
||||
{{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles">Background</h1>
|
||||
{{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<div class="panel additional-info">
|
||||
<section><h1 class="section-titles biopage">Personality Traits</h1>
|
||||
{{editor content=data.details.trait target="data.details.trait" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles biopage">Ideals</h1>
|
||||
{{editor content=data.details.ideal target="data.details.ideal" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles biopage">Bonds</h1>
|
||||
{{editor content=data.details.bond target="data.details.bond" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles biopage">Flaws</h1>
|
||||
{{editor content=data.details.flaw target="data.details.flaw" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
</div>
|
||||
<div class="panel background">
|
||||
<section><h1 class="section-titles biopage">Description</h1>
|
||||
{{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section><h1 class="section-titles">Background</h1>
|
||||
{{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
</div>
|
|
@ -1,33 +1,33 @@
|
|||
<div class="panel">
|
||||
<section class="background">
|
||||
<input type="text" name="data.details.notesname" value="{{data.details.notesname}}"
|
||||
placeholder="Personal Journal" />
|
||||
|
||||
{{editor content=data.details.notes.value target="data.details.notes.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section>
|
||||
<input type="text" name="data.details.notes1name" value="{{data.details.notes1name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes1.value target="data.details.notes1.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<input type="text" name="data.details.notes2name" value="{{data.details.notes2name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes2.value target="data.details.notes2.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<input type="text" name="data.details.notes3name" value="{{data.details.notes3name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes3.value target="data.details.notes3.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<input type="text" name="data.details.notes4name" value="{{data.details.notes4name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes4.value target="data.details.notes4.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
</section>
|
||||
<div class="panel">
|
||||
<section class="background">
|
||||
<input type="text" name="data.details.notesname" value="{{data.details.notesname}}"
|
||||
placeholder="Personal Journal" />
|
||||
|
||||
{{editor content=data.details.notes.value target="data.details.notes.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
<section>
|
||||
<input type="text" name="data.details.notes1name" value="{{data.details.notes1name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes1.value target="data.details.notes1.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<input type="text" name="data.details.notes2name" value="{{data.details.notes2name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes2.value target="data.details.notes2.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<input type="text" name="data.details.notes3name" value="{{data.details.notes3name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes3.value target="data.details.notes3.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<input type="text" name="data.details.notes4name" value="{{data.details.notes4name}}"
|
||||
placeholder="Additional Notes" />
|
||||
{{editor content=data.details.notes4.value target="data.details.notes4.value" button=true owner=owner editable=editable}}
|
||||
</section>
|
||||
|
||||
</section>
|
||||
</div>
|
|
@ -29,7 +29,7 @@
|
|||
</section>
|
||||
<section class="counters">
|
||||
<div class="counter">
|
||||
<h4 class="death-save rollable">{{ localize "SW5E.DeathSave" }}</h4>
|
||||
<h4 class="death-save rollable" data-action="rollDeathSave">{{ localize "SW5E.DeathSave" }}</h4>
|
||||
<div class="counter-value">
|
||||
<div class="death-success">
|
||||
<i class="fas fa-check"></i>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<div id="{{id}}" class="app window-app {{classes}} this-is-my-custom-window" data-appid="{{appId}}">
|
||||
<header class="window-header flexrow">
|
||||
<h4 class="window-title">{{title}}</h4>
|
||||
{{#each headerButtons}}
|
||||
<a class="header-button {{this.class}}"><i class="{{this.icon}}"></i></a>
|
||||
{{/each}}
|
||||
</header>
|
||||
|
||||
<section class="window-content">
|
||||
</section>
|
||||
<div id="{{id}}" class="app window-app {{classes}} this-is-my-custom-window" data-appid="{{appId}}">
|
||||
<header class="window-header flexrow">
|
||||
<h4 class="window-title">{{title}}</h4>
|
||||
{{#each headerButtons}}
|
||||
<a class="header-button {{this.class}}"><i class="{{this.icon}}"></i></a>
|
||||
{{/each}}
|
||||
</header>
|
||||
|
||||
<section class="window-content">
|
||||
</section>
|
||||
</div>
|
Loading…
Add table
Add a link
Reference in a new issue