mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-09 02:52:38 +00:00
coverPage initial draft
This commit is contained in:
@@ -1,124 +1,123 @@
|
|||||||
const _ = require('lodash');
|
const _ = require("lodash");
|
||||||
|
|
||||||
const titles = [
|
const titles = [
|
||||||
'The Burning Gallows',
|
"The Burning Gallows",
|
||||||
'The Ring of Nenlast',
|
"The Ring of Nenlast",
|
||||||
'Below the Blind Tavern',
|
"Below the Blind Tavern",
|
||||||
'Below the Hungering River',
|
"Below the Hungering River",
|
||||||
'Before Bahamut\'s Land',
|
"Before Bahamut's Land",
|
||||||
'The Cruel Grave from Within',
|
"The Cruel Grave from Within",
|
||||||
'The Strength of Trade Road',
|
"The Strength of Trade Road",
|
||||||
'Through The Raven Queen\'s Worlds',
|
"Through The Raven Queen's Worlds",
|
||||||
'Within the Settlement',
|
"Within the Settlement",
|
||||||
'The Crown from Within',
|
"The Crown from Within",
|
||||||
'The Merchant Within the Battlefield',
|
"The Merchant Within the Battlefield",
|
||||||
'Ioun\'s Fading Traveler',
|
"Ioun's Fading Traveler",
|
||||||
'The Legion Ingredient',
|
"The Legion Ingredient",
|
||||||
'The Explorer Lure',
|
"The Explorer Lure",
|
||||||
'Before the Charming Badlands',
|
"Before the Charming Badlands",
|
||||||
'The Living Dead Above the Fearful Cage',
|
"The Living Dead Above the Fearful Cage",
|
||||||
'Vecna\'s Hidden Sage',
|
"Vecna's Hidden Sage",
|
||||||
'Bahamut\'s Demonspawn',
|
"Bahamut's Demonspawn",
|
||||||
'Across Gruumsh\'s Elemental Chaos',
|
"Across Gruumsh's Elemental Chaos",
|
||||||
'The Blade of Orcus',
|
"The Blade of Orcus",
|
||||||
'Beyond Revenge',
|
"Beyond Revenge",
|
||||||
'Brain of Insanity',
|
"Brain of Insanity",
|
||||||
'Breed Battle!, A New Beginning',
|
"Breed Battle!, A New Beginning",
|
||||||
'Evil Lake, A New Beginning',
|
"Evil Lake, A New Beginning",
|
||||||
'Invasion of the Gigantic Cat, Part II',
|
"Invasion of the Gigantic Cat, Part II",
|
||||||
'Kraken War 2020',
|
"Kraken War 2020",
|
||||||
'The Body Whisperers',
|
"The Body Whisperers",
|
||||||
'The Diabolical Tales of the Ape-Women',
|
"The Diabolical Tales of the Ape-Women",
|
||||||
'The Doctor Immortal',
|
"The Doctor Immortal",
|
||||||
'The Doctor from Heaven',
|
"The Doctor from Heaven",
|
||||||
'The Graveyard',
|
"The Graveyard",
|
||||||
'Azure Core',
|
"Azure Core",
|
||||||
'Core Battle',
|
"Core Battle",
|
||||||
'Core of Heaven: The Guardian of Amazement',
|
"Core of Heaven: The Guardian of Amazement",
|
||||||
'Deadly Amazement III',
|
"Deadly Amazement III",
|
||||||
'Dry Chaos IX',
|
"Dry Chaos IX",
|
||||||
'Gate Thunder',
|
"Gate Thunder",
|
||||||
'Guardian: Skies of the Dark Wizard',
|
"Guardian: Skies of the Dark Wizard",
|
||||||
'Lute of Eternity',
|
"Lute of Eternity",
|
||||||
'Mercury\'s Planet: Brave Evolution',
|
"Mercury's Planet: Brave Evolution",
|
||||||
'Ruby of Atlantis: The Quake of Peace',
|
"Ruby of Atlantis: The Quake of Peace",
|
||||||
'Sky of Zelda: The Thunder of Force',
|
"Sky of Zelda: The Thunder of Force",
|
||||||
'Vyse\'s Skies',
|
"Vyse's Skies",
|
||||||
'White Greatness III',
|
"White Greatness III",
|
||||||
'Yellow Divinity',
|
"Yellow Divinity",
|
||||||
'Zidane\'s Ghost'
|
"Zidane's Ghost",
|
||||||
];
|
];
|
||||||
|
|
||||||
const subtitles = [
|
const subtitles = [
|
||||||
'In an ominous universe, a botanist opposes terrorism.',
|
"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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 kingdom of panic, six adventurers oppose lawlessness.",
|
||||||
'In a land of dreams and hopelessness, three hackers and a cyborg search for justice.',
|
"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.',
|
"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 wicked universe, five seers fight lawlessness.",
|
||||||
'In a kingdom of death, in an era of illusion and blood, four colonists search for fame.',
|
"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 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.',
|
"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.',
|
"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 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.',
|
"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.',
|
"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 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 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 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 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.',
|
"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.',
|
"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 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 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 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 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 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 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 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 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 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 = ()=>{
|
{{coverPage
|
||||||
return `<style>
|
|
||||||
.page#p1{ text-align:center; counter-increment: none; }
|
|
||||||
.page#p1:after{ display:none; }
|
|
||||||
.page:nth-child(2n) .pageNumber { left: inherit !important; right: 2px !important; }
|
|
||||||
.page:nth-child(2n+1) .pageNumber { right: inherit !important; left: 2px !important; }
|
|
||||||
.page:nth-child(2n)::after { transform: scaleX(1); }
|
|
||||||
.page:nth-child(2n+1)::after { transform: scaleX(-1); }
|
|
||||||
.page:nth-child(2n) .footnote { left: inherit; text-align: right; }
|
|
||||||
.page:nth-child(2n+1) .footnote { left: 80px; text-align: left; }
|
|
||||||
</style>
|
|
||||||
|
|
||||||
{{margin-top:225px}}
|
 {left:0px}
|
||||||
|
|
||||||
# ${_.sample(titles)}
|
# ${_.sample(titles)}
|
||||||
|
|
||||||
{{margin-top:25px}}
|
## ${_.sample(subtitles)}
|
||||||
|
___
|
||||||
|
|
||||||
|
{{banner
|
||||||
|
5e HOMEBREW
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{footnote
|
||||||
|
Everything a Homebrew needs to create a pretty document <br> for the world's greatest roleplaying game
|
||||||
|
}}
|
||||||
|
|
||||||
{{wide
|
|
||||||
##### ${_.sample(subtitles)}
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
\\page`;
|
\\page`;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -677,6 +677,137 @@ body {
|
|||||||
margin-top : 0.2cm;
|
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
|
// * TABLE OF CONTENTS
|
||||||
// *****************************/
|
// *****************************/
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
@monsterBorderImage : url('/assets/monsterBorderFancy.png');
|
@monsterBorderImage : url('/assets/monsterBorderFancy.png');
|
||||||
@codeBorderImage : url('/assets/codeBorder.png');
|
@codeBorderImage : url('/assets/codeBorder.png');
|
||||||
@classTableDecoration : url('/assets/classTableDecoration.png');
|
@classTableDecoration : url('/assets/classTableDecoration.png');
|
||||||
|
@coverPageLogo : url('/assets/coverPageLogo.png');
|
||||||
|
@coverPageBanner : url('/assets/coverPageBanner.png');
|
||||||
|
@coverPageHorizontalRule : url('/assets/coverPageHorizontalRule.png');
|
||||||
|
|
||||||
// Watercolor Images
|
// Watercolor Images
|
||||||
@watercolor1 : url('/assets/watercolor/watercolor1.png');
|
@watercolor1 : url('/assets/watercolor/watercolor1.png');
|
||||||
|
|||||||
BIN
themes/assets/coverPageBanner.png
Normal file
BIN
themes/assets/coverPageBanner.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
BIN
themes/assets/coverPageHorizonalRule.png
Normal file
BIN
themes/assets/coverPageHorizonalRule.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
themes/assets/coverPageLogo.png
Normal file
BIN
themes/assets/coverPageLogo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
BIN
themes/fonts/5e/VeracruzBold.woff2
Normal file
BIN
themes/fonts/5e/VeracruzBold.woff2
Normal file
Binary file not shown.
@@ -106,3 +106,10 @@
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: VeraCruzBold;
|
||||||
|
src: url('../../../fonts/5e/VeracruzBold.woff2');
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user