Merge branch 'Develop' into professorbunbury-sw5e

This commit is contained in:
CK 2021-02-04 15:34:12 -05:00 committed by GitHub
commit 08a5c0be33
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
41 changed files with 6024 additions and 5848 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

8
CONTRIBUTIONS.md Normal file
View 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)

View file

@ -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

View file

@ -23,7 +23,7 @@
flex: 1;
margin: 0;
line-height: 36px;
.bungeeInline();
.engli-Besh();
color: @colorOlive;
&:hover {
color: #111;

View file

@ -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;

View file

@ -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

View file

@ -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;
}
}
}
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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";
}

View file

@ -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);
}
}

View file

@ -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";
}

View file

@ -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";

View file

@ -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);
}
/* -------------------------------------------- */

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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
View 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);
});
}
}

View file

@ -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);
}));
}

View file

@ -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);
}
});

View file

@ -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"

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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",

File diff suppressed because it is too large Load diff

View file

@ -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;

View file

@ -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;

View file

@ -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
View file

@ -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);
})
}

View file

@ -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"

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>