diff --git a/themes/V3/5ePHB/snippets/coverpage.gen.js b/themes/V3/5ePHB/snippets/coverpage.gen.js
index 0fb8ba7a4..4704a9d59 100644
--- a/themes/V3/5ePHB/snippets/coverpage.gen.js
+++ b/themes/V3/5ePHB/snippets/coverpage.gen.js
@@ -1,124 +1,123 @@
-const _ = require('lodash');
+const _ = require("lodash");
const titles = [
- 'The Burning Gallows',
- 'The Ring of Nenlast',
- 'Below the Blind Tavern',
- 'Below the Hungering River',
- 'Before Bahamut\'s Land',
- 'The Cruel Grave from Within',
- 'The Strength of Trade Road',
- 'Through The Raven Queen\'s Worlds',
- 'Within the Settlement',
- 'The Crown from Within',
- 'The Merchant Within the Battlefield',
- 'Ioun\'s Fading Traveler',
- 'The Legion Ingredient',
- 'The Explorer Lure',
- 'Before the Charming Badlands',
- 'The Living Dead Above the Fearful Cage',
- 'Vecna\'s Hidden Sage',
- 'Bahamut\'s Demonspawn',
- 'Across Gruumsh\'s Elemental Chaos',
- 'The Blade of Orcus',
- 'Beyond Revenge',
- 'Brain of Insanity',
- 'Breed Battle!, A New Beginning',
- 'Evil Lake, A New Beginning',
- 'Invasion of the Gigantic Cat, Part II',
- 'Kraken War 2020',
- 'The Body Whisperers',
- 'The Diabolical Tales of the Ape-Women',
- 'The Doctor Immortal',
- 'The Doctor from Heaven',
- 'The Graveyard',
- 'Azure Core',
- 'Core Battle',
- 'Core of Heaven: The Guardian of Amazement',
- 'Deadly Amazement III',
- 'Dry Chaos IX',
- 'Gate Thunder',
- 'Guardian: Skies of the Dark Wizard',
- 'Lute of Eternity',
- 'Mercury\'s Planet: Brave Evolution',
- 'Ruby of Atlantis: The Quake of Peace',
- 'Sky of Zelda: The Thunder of Force',
- 'Vyse\'s Skies',
- 'White Greatness III',
- 'Yellow Divinity',
- 'Zidane\'s Ghost'
+ "The Burning Gallows",
+ "The Ring of Nenlast",
+ "Below the Blind Tavern",
+ "Below the Hungering River",
+ "Before Bahamut's Land",
+ "The Cruel Grave from Within",
+ "The Strength of Trade Road",
+ "Through The Raven Queen's Worlds",
+ "Within the Settlement",
+ "The Crown from Within",
+ "The Merchant Within the Battlefield",
+ "Ioun's Fading Traveler",
+ "The Legion Ingredient",
+ "The Explorer Lure",
+ "Before the Charming Badlands",
+ "The Living Dead Above the Fearful Cage",
+ "Vecna's Hidden Sage",
+ "Bahamut's Demonspawn",
+ "Across Gruumsh's Elemental Chaos",
+ "The Blade of Orcus",
+ "Beyond Revenge",
+ "Brain of Insanity",
+ "Breed Battle!, A New Beginning",
+ "Evil Lake, A New Beginning",
+ "Invasion of the Gigantic Cat, Part II",
+ "Kraken War 2020",
+ "The Body Whisperers",
+ "The Diabolical Tales of the Ape-Women",
+ "The Doctor Immortal",
+ "The Doctor from Heaven",
+ "The Graveyard",
+ "Azure Core",
+ "Core Battle",
+ "Core of Heaven: The Guardian of Amazement",
+ "Deadly Amazement III",
+ "Dry Chaos IX",
+ "Gate Thunder",
+ "Guardian: Skies of the Dark Wizard",
+ "Lute of Eternity",
+ "Mercury's Planet: Brave Evolution",
+ "Ruby of Atlantis: The Quake of Peace",
+ "Sky of Zelda: The Thunder of Force",
+ "Vyse's Skies",
+ "White Greatness III",
+ "Yellow Divinity",
+ "Zidane's Ghost",
];
const subtitles = [
- 'In an ominous universe, a botanist opposes terrorism.',
- 'In a demon-haunted city, in an age of lies and hate, a physicist tries to find an ancient treasure and battles a mob of aliens.',
- 'In a land of corruption, two cyberneticists and a dungeon delver search for freedom.',
- 'In an evil empire of horror, two rangers battle the forces of hell.',
- 'In a lost city, in an age of sorcery, a librarian quests for revenge.',
- 'In a universe of illusions and danger, three time travellers and an adventurer search for justice.',
- 'In a forgotten universe of barbarism, in an era of terror and mysticism, a virtual reality programmer and a spy try to find vengance and battle crime.',
- 'In a universe of demons, in an era of insanity and ghosts, three bodyguards and a bodyguard try to find vengance.',
- 'In a kingdom of corruption and battle, seven artificial intelligences try to save the last living fertile woman.',
- 'In a universe of virutal reality and agony, in an age of ghosts and ghosts, a fortune-teller and a wanderer try to avert the apocalypse.',
- 'In a crime-infested kingdom, three martial artists quest for the truth and oppose evil.',
- 'In a terrifying universe of lost souls, in an era of lost souls, eight dancers fight evil.',
- 'In a galaxy of confusion and insanity, three martial artists and a duke battle a mob of psychics.',
- 'In an amazing kingdom, a wizard and a secretary hope to prevent the destruction of mankind.',
- 'In a kingdom of deception, a reporter searches for fame.',
- 'In a hellish empire, a swordswoman and a duke try to find the ultimate weapon and battle a conspiracy.',
- 'In an evil galaxy of illusion, in a time of technology and misery, seven psychiatrists battle crime.',
- 'In a dark city of confusion, three swordswomen and a singer battle lawlessness.',
- 'In an ominous empire, in an age of hate, two philosophers and a student try to find justice and battle a mob of mages intent on stealing the souls of the innocent.',
- 'In a kingdom of panic, six adventurers oppose lawlessness.',
- 'In a land of dreams and hopelessness, three hackers and a cyborg search for justice.',
- 'On a planet of mysticism, three travelers and a fire fighter quest for the ultimate weapon and oppose evil.',
- 'In a wicked universe, five seers fight lawlessness.',
- 'In a kingdom of death, in an era of illusion and blood, four colonists search for fame.',
- 'In an amazing kingdom, in an age of sorcery and lost souls, eight space pirates quest for freedom.',
- 'In a cursed empire, five inventors oppose terrorism.',
- 'On a crime-ridden planet of conspiracy, a watchman and an artificial intelligence try to find love and oppose lawlessness.',
- 'In a forgotten land, a reporter and a spy try to stop the apocalypse.',
- 'In a forbidden land of prophecy, a scientist and an archivist oppose a cabal of barbarians intent on stealing the souls of the innocent.',
- 'On an infernal world of illusion, a grave robber and a watchman try to find revenge and combat a syndicate of mages intent on stealing the source of all magic.',
- 'In a galaxy of dark magic, four fighters seek freedom.',
- 'In an empire of deception, six tomb-robbers quest for the ultimate weapon and combat an army of raiders.',
- 'In a kingdom of corruption and lost souls, in an age of panic, eight planetologists oppose evil.',
- 'In a galaxy of misery and hopelessness, in a time of agony and pain, five planetologists search for vengance.',
- 'In a universe of technology and insanity, in a time of sorcery, a computer techician quests for hope.',
- 'On a planet of dark magic and barbarism, in an age of horror and blasphemy, seven librarians search for fame.',
- 'In an empire of dark magic, in a time of blood and illusions, four monks try to find the ultimate weapon and combat terrorism.',
- 'In a forgotten empire of dark magic, six kings try to prevent the destruction of mankind.',
- 'In a galaxy of dark magic and horror, in an age of hopelessness, four marines and an outlaw combat evil.',
- 'In a mysterious city of illusion, in an age of computerization, a witch-hunter tries to find the ultimate weapon and opposes an evil corporation.',
- 'In a damned kingdom of technology, a virtual reality programmer and a fighter seek fame.',
- 'In a hellish kingdom, in an age of blasphemy and blasphemy, an astrologer searches for fame.',
- 'In a damned world of devils, an alien and a ranger quest for love and oppose a syndicate of demons.',
- 'In a cursed galaxy, in a time of pain, seven librarians hope to avert the apocalypse.',
- 'In a crime-infested galaxy, in an era of hopelessness and panic, three champions and a grave robber try to solve the ultimate crime.'
+ "In an ominous universe, a botanist opposes terrorism.",
+ "In a demon-haunted city, in an age of lies and hate, a physicist tries to find an ancient treasure and battles a mob of aliens.",
+ "In a land of corruption, two cyberneticists and a dungeon delver search for freedom.",
+ "In an evil empire of horror, two rangers battle the forces of hell.",
+ "In a lost city, in an age of sorcery, a librarian quests for revenge.",
+ "In a universe of illusions and danger, three time travellers and an adventurer search for justice.",
+ "In a forgotten universe of barbarism, in an era of terror and mysticism, a virtual reality programmer and a spy try to find vengance and battle crime.",
+ "In a universe of demons, in an era of insanity and ghosts, three bodyguards and a bodyguard try to find vengance.",
+ "In a kingdom of corruption and battle, seven artificial intelligences try to save the last living fertile woman.",
+ "In a universe of virutal reality and agony, in an age of ghosts and ghosts, a fortune-teller and a wanderer try to avert the apocalypse.",
+ "In a crime-infested kingdom, three martial artists quest for the truth and oppose evil.",
+ "In a terrifying universe of lost souls, in an era of lost souls, eight dancers fight evil.",
+ "In a galaxy of confusion and insanity, three martial artists and a duke battle a mob of psychics.",
+ "In an amazing kingdom, a wizard and a secretary hope to prevent the destruction of mankind.",
+ "In a kingdom of deception, a reporter searches for fame.",
+ "In a hellish empire, a swordswoman and a duke try to find the ultimate weapon and battle a conspiracy.",
+ "In an evil galaxy of illusion, in a time of technology and misery, seven psychiatrists battle crime.",
+ "In a dark city of confusion, three swordswomen and a singer battle lawlessness.",
+ "In an ominous empire, in an age of hate, two philosophers and a student try to find justice and battle a mob of mages intent on stealing the souls of the innocent.",
+ "In a kingdom of panic, six adventurers oppose lawlessness.",
+ "In a land of dreams and hopelessness, three hackers and a cyborg search for justice.",
+ "On a planet of mysticism, three travelers and a fire fighter quest for the ultimate weapon and oppose evil.",
+ "In a wicked universe, five seers fight lawlessness.",
+ "In a kingdom of death, in an era of illusion and blood, four colonists search for fame.",
+ "In an amazing kingdom, in an age of sorcery and lost souls, eight space pirates quest for freedom.",
+ "In a cursed empire, five inventors oppose terrorism.",
+ "On a crime-ridden planet of conspiracy, a watchman and an artificial intelligence try to find love and oppose lawlessness.",
+ "In a forgotten land, a reporter and a spy try to stop the apocalypse.",
+ "In a forbidden land of prophecy, a scientist and an archivist oppose a cabal of barbarians intent on stealing the souls of the innocent.",
+ "On an infernal world of illusion, a grave robber and a watchman try to find revenge and combat a syndicate of mages intent on stealing the source of all magic.",
+ "In a galaxy of dark magic, four fighters seek freedom.",
+ "In an empire of deception, six tomb-robbers quest for the ultimate weapon and combat an army of raiders.",
+ "In a kingdom of corruption and lost souls, in an age of panic, eight planetologists oppose evil.",
+ "In a galaxy of misery and hopelessness, in a time of agony and pain, five planetologists search for vengance.",
+ "In a universe of technology and insanity, in a time of sorcery, a computer techician quests for hope.",
+ "On a planet of dark magic and barbarism, in an age of horror and blasphemy, seven librarians search for fame.",
+ "In an empire of dark magic, in a time of blood and illusions, four monks try to find the ultimate weapon and combat terrorism.",
+ "In a forgotten empire of dark magic, six kings try to prevent the destruction of mankind.",
+ "In a galaxy of dark magic and horror, in an age of hopelessness, four marines and an outlaw combat evil.",
+ "In a mysterious city of illusion, in an age of computerization, a witch-hunter tries to find the ultimate weapon and opposes an evil corporation.",
+ "In a damned kingdom of technology, a virtual reality programmer and a fighter seek fame.",
+ "In a hellish kingdom, in an age of blasphemy and blasphemy, an astrologer searches for fame.",
+ "In a damned world of devils, an alien and a ranger quest for love and oppose a syndicate of demons.",
+ "In a cursed galaxy, in a time of pain, seven librarians hope to avert the apocalypse.",
+ "In a crime-infested galaxy, in an era of hopelessness and panic, three champions and a grave robber try to solve the ultimate crime.",
];
+module.exports = () => {
+ return `
-module.exports = ()=>{
- return `
+{{coverPage
-{{margin-top:225px}}
+ {left:0px}
# ${_.sample(titles)}
-{{margin-top:25px}}
+## ${_.sample(subtitles)}
+___
+
+{{banner
+5e HOMEBREW
+}}
+
+{{footnote
+Everything a Homebrew needs to create a pretty document
for the world's greatest roleplaying game
+}}
-{{wide
-##### ${_.sample(subtitles)}
}}
\\page`;
-};
\ No newline at end of file
+};
diff --git a/themes/V3/5ePHB/style.less b/themes/V3/5ePHB/style.less
index 09f0dc790..1d4832a25 100644
--- a/themes/V3/5ePHB/style.less
+++ b/themes/V3/5ePHB/style.less
@@ -677,6 +677,137 @@ body {
margin-top : 0.2cm;
}
}
+//*****************************
+// * COVER PAGE
+// *****************************/
+
+.page {
+ &:has(.coverPage):after {
+ display: none;
+ }
+ .coverPage {
+ position: absolute;
+ inset: 0;
+ padding: 90px 0px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+
+ p {
+ color: white;
+ font-size: 20px;
+ }
+ > p > img {
+ position: absolute;
+ inset: 0;
+ height: 100%;
+ min-width: 100%;
+ }
+ &:before {
+ background-image: @coverPageLogo;
+ background-position: center;
+ background-size: 60px;
+ background-repeat: no-repeat;
+ position: absolute;
+ top: 15px;
+ content: '';
+ display: block;
+ height: 70px;
+ width: 100%;
+ filter: drop-shadow(0 0 10px black);
+ }
+ h1 {
+ --shadow-x0: #000 0px 0px 3.5px;
+ --shadow-x1: var(--shadow-x0), var(--shadow-x0), var(--shadow-x0);
+ --shadow-x2: var(--shadow-x1), var(--shadow-x1), var(--shadow-x1);
+ --shadow-x3: var(--shadow-x2), var(--shadow-x2), var(--shadow-x2);
+ text-shadow: var(--shadow-x3), var(--shadow-x3), var(--shadow-x3);
+ text-transform: uppercase;
+ max-width: 18ch;
+ margin-top: 3px;
+ color: white;
+ font-family: NodestoCapsCondensed;
+ font-size: 6.6em;
+ font-weight: normal;
+ line-height: 72px;
+ word-break: break-word;
+ transform: scaleX(0.94);
+ }
+ hr {
+ position: relative;
+ top: -16px;
+ background-image: @coverPageHorizontalRule;
+ background-size: 100% 100%;
+ visibility: visible;
+ height: 64px;
+ width: 450px;
+ border: none;
+ margin: 2px auto -24px;
+ }
+ h2 {
+ --shadow-x0: #000 0px 0px 2.5px;
+ --shadow-x1: var(--shadow-x0), var(--shadow-x0), var(--shadow-x0);
+ --shadow-x2: var(--shadow-x1), var(--shadow-x1), var(--shadow-x1);
+ --shadow-x3: var(--shadow-x2), var(--shadow-x2), var(--shadow-x2);
+ text-shadow: var(--shadow-x3), var(--shadow-x3), var(--shadow-x3);
+ font-family: NodestoCapsCondensed;
+ font-weight: normal;
+ font-size: 2.5em;
+ letter-spacing: 0.5px;
+ max-width: 46ch;
+ color: white;
+ }
+ .banner {
+ filter: drop-shadow(2px 1px 5px #000);
+ position: absolute;
+ left: 0;
+ bottom: 157px;
+ background-image: @coverPageBanner;
+ background-position: left;
+ background-repeat: no-repeat;
+ background-size: 400px;
+ content: '';
+ display: block;
+ height: 67px;
+ width: 50%;
+
+ p {
+ position: absolute;
+ top: 60%;
+ left: 0;
+ translate: 0 -50%;
+ width: 100%;
+ text-align: left;
+ padding-left: 50px;
+ font-family: NodestoCapsCondensed;
+ font-weight: normal;
+ font-size: 40px;
+ font-stretch: 200%;
+ letter-spacing: 0.5px;
+ transform: scaleY(0.7);
+ }
+ }
+
+ .footnote {
+ --shadow-x0: #000 0px 0px 1.8px;
+ --shadow-x1: var(--shadow-x0), var(--shadow-x0), var(--shadow-x0);
+ --shadow-x2: var(--shadow-x1), var(--shadow-x1), var(--shadow-x1);
+ text-shadow: var(--shadow-x2), var(--shadow-x2), var(--shadow-x2);
+ text-transform: none;
+ position: absolute;
+ bottom: 3.5em;
+ left: 0;
+ width: 100%;
+ font-family: VeraCruzBold;
+ text-align: center;
+ letter-spacing: 0.6px;
+ transform: scaleX(90%);
+ }
+
+ }
+}
+
//*****************************
// * TABLE OF CONTENTS
// *****************************/
diff --git a/themes/assets/assets.less b/themes/assets/assets.less
index 7df5db0f6..280722dc0 100644
--- a/themes/assets/assets.less
+++ b/themes/assets/assets.less
@@ -10,6 +10,9 @@
@monsterBorderImage : url('/assets/monsterBorderFancy.png');
@codeBorderImage : url('/assets/codeBorder.png');
@classTableDecoration : url('/assets/classTableDecoration.png');
+@coverPageLogo : url('/assets/coverPageLogo.png');
+@coverPageBanner : url('/assets/coverPageBanner.png');
+@coverPageHorizontalRule : url('/assets/coverPageHorizontalRule.png');
// Watercolor Images
@watercolor1 : url('/assets/watercolor/watercolor1.png');
diff --git a/themes/assets/coverPageBanner.png b/themes/assets/coverPageBanner.png
new file mode 100644
index 000000000..b1dfeadb1
Binary files /dev/null and b/themes/assets/coverPageBanner.png differ
diff --git a/themes/assets/coverPageHorizonalRule.png b/themes/assets/coverPageHorizonalRule.png
new file mode 100644
index 000000000..da706d8c0
Binary files /dev/null and b/themes/assets/coverPageHorizonalRule.png differ
diff --git a/themes/assets/coverPageLogo.png b/themes/assets/coverPageLogo.png
new file mode 100644
index 000000000..18ecc6438
Binary files /dev/null and b/themes/assets/coverPageLogo.png differ
diff --git a/themes/fonts/5e/VeracruzBold.woff2 b/themes/fonts/5e/VeracruzBold.woff2
new file mode 100644
index 000000000..531ba9f8b
Binary files /dev/null and b/themes/fonts/5e/VeracruzBold.woff2 differ
diff --git a/themes/fonts/5e/fonts.less b/themes/fonts/5e/fonts.less
index f5118a7cc..92be55887 100644
--- a/themes/fonts/5e/fonts.less
+++ b/themes/fonts/5e/fonts.less
@@ -106,3 +106,10 @@
font-weight: bold;
font-style: italic;
}
+
+@font-face {
+ font-family: VeraCruzBold;
+ src: url('../../../fonts/5e/VeracruzBold.woff2');
+ font-weight: bold;
+ font-style: normal;
+}