Spaces:
Sleeping
Sleeping
drakosfire
commited on
Commit
•
760ff9a
1
Parent(s):
c7d9eea
LLM dictionary to text and back to dictionary for inventory, html templates
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- __pycache__/app.cpython-310.pyc +0 -0
- __pycache__/process_text.cpython-310.pyc +0 -0
- __pycache__/store_helper.cpython-310.pyc +0 -0
- app.py +138 -32
- dependencies/5ePHBstyle.css +20 -0
- dependencies/all.css +5 -0
- dependencies/bundle.css +0 -0
- dependencies/css.css +288 -0
- dependencies/homebrewery -cssPaths +8 -0
- dependencies/homebrewery-docker.txt +1 -0
- dependencies/phb.standalone.css +0 -0
- dependencies/style.css +615 -0
- dependencies/themes/Legacy/5ePHB/settings.json +5 -0
- dependencies/themes/Legacy/5ePHB/snippets.js +327 -0
- dependencies/themes/Legacy/5ePHB/snippets/classfeature.gen.js +52 -0
- dependencies/themes/Legacy/5ePHB/snippets/classtable.gen.js +114 -0
- dependencies/themes/Legacy/5ePHB/snippets/coverpage.gen.js +117 -0
- dependencies/themes/Legacy/5ePHB/snippets/fullclass.gen.js +43 -0
- dependencies/themes/Legacy/5ePHB/snippets/magic.gen.js +91 -0
- dependencies/themes/Legacy/5ePHB/snippets/monsterblock.gen.js +200 -0
- dependencies/themes/Legacy/5ePHB/snippets/tableOfContents.gen.js +72 -0
- dependencies/themes/Legacy/5ePHB/style.less +501 -0
- dependencies/themes/V3/5eDMG/dropdownPreview.png +3 -0
- dependencies/themes/V3/5eDMG/dropdownTexture.png +3 -0
- dependencies/themes/V3/5eDMG/settings.json +6 -0
- dependencies/themes/V3/5eDMG/snippets.js +4 -0
- dependencies/themes/V3/5eDMG/style.less +43 -0
- dependencies/themes/V3/5ePHB/dropdownPreview.png +3 -0
- dependencies/themes/V3/5ePHB/dropdownTexture.png +3 -0
- dependencies/themes/V3/5ePHB/settings.json +6 -0
- dependencies/themes/V3/5ePHB/snippets.js +327 -0
- dependencies/themes/V3/5ePHB/snippets/classfeature.gen.js +49 -0
- dependencies/themes/V3/5ePHB/snippets/classtable.gen.js +138 -0
- dependencies/themes/V3/5ePHB/snippets/coverpage.gen.js +156 -0
- dependencies/themes/V3/5ePHB/snippets/fullclass.gen.js +43 -0
- dependencies/themes/V3/5ePHB/snippets/index.gen.js +85 -0
- dependencies/themes/V3/5ePHB/snippets/magic.gen.js +109 -0
- dependencies/themes/V3/5ePHB/snippets/monsterblock.gen.js +184 -0
- dependencies/themes/V3/5ePHB/snippets/quote.gen.js +51 -0
- dependencies/themes/V3/5ePHB/snippets/script.gen.js +48 -0
- dependencies/themes/V3/5ePHB/snippets/tableOfContents.gen.js +86 -0
- dependencies/themes/V3/5ePHB/snippets/watercolor.gen.js +5 -0
- dependencies/themes/V3/5ePHB/style.less +942 -0
- dependencies/themes/V3/Blank/dropdownPreview.png +3 -0
- dependencies/themes/V3/Blank/dropdownTexture.png +3 -0
- dependencies/themes/V3/Blank/settings.json +6 -0
- dependencies/themes/V3/Blank/snippets.js +444 -0
- dependencies/themes/V3/Blank/snippets/footer.gen.js +17 -0
- dependencies/themes/V3/Blank/snippets/imageMask.gen.js +46 -0
- dependencies/themes/V3/Blank/snippets/watercolor.gen.js +5 -0
__pycache__/app.cpython-310.pyc
CHANGED
Binary files a/__pycache__/app.cpython-310.pyc and b/__pycache__/app.cpython-310.pyc differ
|
|
__pycache__/process_text.cpython-310.pyc
ADDED
Binary file (2.21 kB). View file
|
|
__pycache__/store_helper.cpython-310.pyc
CHANGED
Binary files a/__pycache__/store_helper.cpython-310.pyc and b/__pycache__/store_helper.cpython-310.pyc differ
|
|
app.py
CHANGED
@@ -4,6 +4,7 @@ import utilities as u
|
|
4 |
import os
|
5 |
import ctypes
|
6 |
import store_helper as sh
|
|
|
7 |
|
8 |
|
9 |
# This is a fix for the way that python doesn't release system memory back to the OS and it was leading to locking up the system
|
@@ -26,63 +27,168 @@ gr.set_static_paths(paths=list_of_static_dir)
|
|
26 |
|
27 |
with gr.Blocks() as demo:
|
28 |
# Functions and State Variables
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
specialties_description = gr.State()
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
def gen_store_desc(user_description):
|
33 |
-
|
34 |
llm_output = sh.call_llm_and_cleanup(user_description)
|
35 |
-
|
36 |
-
#
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
#Return each State variable twice, once to the variable and once to the textbox
|
41 |
-
return [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
|
43 |
-
def
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
|
51 |
#Return each State variable twice, once to the variable and once to the textbox
|
52 |
-
return [
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
-
|
55 |
def update_visibility(textbox):
|
56 |
if not textbox:
|
57 |
return gr.update(visible=False)
|
58 |
return gr.update(visible=True)
|
59 |
with gr.Tab("Store"):
|
60 |
-
|
61 |
lines = 1, placeholder=f"Ex : A trade shop with a female ogre merchant, basic trade goods and travel supplies, has a secret basement for smuggling.",
|
62 |
elem_id= "custom-textbox")
|
63 |
desc_gen = gr.Button(value = "Click to Generate Description")
|
64 |
-
|
|
|
|
|
|
|
|
|
65 |
store_description_output.change(fn=update_visibility,
|
66 |
inputs=[store_description_output],
|
67 |
outputs=[store_description_output])
|
68 |
-
|
69 |
-
|
70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
image_path_list= u.absolute_path("./folder_with_images")
|
73 |
|
74 |
-
with gr.Tab("Inventory"):
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
|
|
|
|
|
|
85 |
])
|
|
|
86 |
|
87 |
image_path_list= u.absolute_path("./folder_with_images")
|
88 |
if __name__ == "__main__":
|
|
|
4 |
import os
|
5 |
import ctypes
|
6 |
import store_helper as sh
|
7 |
+
import process_text
|
8 |
|
9 |
|
10 |
# This is a fix for the way that python doesn't release system memory back to the OS and it was leading to locking up the system
|
|
|
27 |
|
28 |
with gr.Blocks() as demo:
|
29 |
# Functions and State Variables
|
30 |
+
store= gr.State()
|
31 |
+
store_name = gr.State()
|
32 |
+
store_description = gr.State()
|
33 |
+
store_reputation = gr.State()
|
34 |
+
store_backstory = gr.State()
|
35 |
+
store_sd_prompt = gr.State()
|
36 |
+
store_location = gr.State()
|
37 |
+
store_type = gr.State()
|
38 |
+
store_size = gr.State()
|
39 |
+
store_owner = gr.State()
|
40 |
+
store_employees = gr.State()
|
41 |
+
store_hours = gr.State()
|
42 |
+
store_services = gr.State()
|
43 |
+
store_specialties = gr.State()
|
44 |
+
notable_customers = gr.State()
|
45 |
+
store_quests = gr.State()
|
46 |
+
store_rumors = gr.State()
|
47 |
+
store_inventory = gr.State()
|
48 |
+
store_inventory_dict = gr.State()
|
49 |
+
|
50 |
specialties_description = gr.State()
|
51 |
|
52 |
+
def check_and_process_contents(item):
|
53 |
+
if item:
|
54 |
+
if len(item) > 0:
|
55 |
+
store_value = item
|
56 |
+
# if type(store_value) == list:
|
57 |
+
store_value = process_text.format_qualities(store_value)
|
58 |
+
else : store_value = ""
|
59 |
+
return store_value
|
60 |
+
|
61 |
def gen_store_desc(user_description):
|
|
|
62 |
llm_output = sh.call_llm_and_cleanup(user_description)
|
63 |
+
store_dict = sh.convert_to_dict(llm_output)
|
64 |
+
# Key List for checking is speciufic keys are present before running parsing functions
|
65 |
+
keys_list = list(llm_output)
|
66 |
+
store_name_value = store_dict['store_name']
|
67 |
+
store_description_value = store_dict['description']
|
68 |
+
store_reputation_value = store_dict['reputation']
|
69 |
+
store_backstory_value = store_dict['backstory']
|
70 |
+
store_sd_prompt_value = store_dict['store_sd_prompt']
|
71 |
+
store_type_value = store_dict['type']
|
72 |
+
store_size_value = store_dict['size']
|
73 |
+
store_location_value = check_and_process_contents(store_dict['location'])
|
74 |
+
store_owner_value = check_and_process_contents(store_dict['owners'])
|
75 |
+
store_employees_value = check_and_process_contents(store_dict['employees'])
|
76 |
+
store_hours_value = store_dict['store_hours']
|
77 |
+
store_services_value = check_and_process_contents(store_dict['services'])
|
78 |
+
store_specialties_value = check_and_process_contents(store_dict['specialties'])
|
79 |
+
notable_customers_value = check_and_process_contents(store_dict['notable_customers'])
|
80 |
+
store_quests_value = check_and_process_contents(store_dict['related_quests'])
|
81 |
+
store_rumors_value = check_and_process_contents(store_dict['rumors'])
|
82 |
+
|
83 |
|
84 |
#Return each State variable twice, once to the variable and once to the textbox
|
85 |
+
return [store_name_value, store_name_value,
|
86 |
+
store_description_value, store_description_value,
|
87 |
+
store_reputation_value, store_reputation_value,
|
88 |
+
store_backstory_value, store_backstory_value,
|
89 |
+
store_sd_prompt_value, store_sd_prompt_value,
|
90 |
+
store_type_value, store_type_value,
|
91 |
+
store_size_value, store_size_value,
|
92 |
+
store_location_value, store_location_value,
|
93 |
+
store_owner_value, store_owner_value,
|
94 |
+
store_employees_value,store_employees_value,
|
95 |
+
notable_customers_value, notable_customers_value,
|
96 |
+
store_hours_value, store_hours_value,
|
97 |
+
store_services_value, store_services_value,
|
98 |
+
store_specialties_value, store_specialties_value,
|
99 |
+
store_quests_value, store_quests_value,
|
100 |
+
store_rumors_value, store_rumors_value
|
101 |
+
]
|
102 |
|
103 |
+
def gen_store_inventory(store_name, store_type, store_size, store_owner, store_reputation):
|
104 |
+
inventory_description = f"{store_name}, {store_type} {store_size} {store_owner} {store_reputation}"
|
105 |
+
inventory_dict = sh.call_llm_and_cleanup(inventory_description, inventory=True)
|
106 |
+
inventory_dict = sh.convert_to_dict(inventory_dict)
|
107 |
+
if inventory_dict['inventory']:
|
108 |
+
store_inventory_value = inventory_dict['inventory']
|
109 |
+
store_inventory_value = process_text.format_inventory(store_inventory_value)
|
110 |
|
111 |
#Return each State variable twice, once to the variable and once to the textbox
|
112 |
+
return [store_inventory_value,store_inventory_value
|
113 |
+
]
|
114 |
+
|
115 |
+
def inventory_to_dict(inventory):
|
116 |
+
inventory_dict = process_text.parse_text_to_inventory(inventory)
|
117 |
+
inventory_dict = sh.convert_to_dict(inventory_dict)
|
118 |
+
return inventory_dict, inventory_dict
|
119 |
|
120 |
+
#Function to dynamically render textbox if it has text.
|
121 |
def update_visibility(textbox):
|
122 |
if not textbox:
|
123 |
return gr.update(visible=False)
|
124 |
return gr.update(visible=True)
|
125 |
with gr.Tab("Store"):
|
126 |
+
user_store_dict = gr.Textbox(label = "Step 1 : What are the core qualities of the store?",
|
127 |
lines = 1, placeholder=f"Ex : A trade shop with a female ogre merchant, basic trade goods and travel supplies, has a secret basement for smuggling.",
|
128 |
elem_id= "custom-textbox")
|
129 |
desc_gen = gr.Button(value = "Click to Generate Description")
|
130 |
+
store_name_output = gr.Textbox(label = "Store Name", lines = 1, interactive = True, visible = False)
|
131 |
+
store_name_output.change(fn=update_visibility,
|
132 |
+
inputs=[store_name_output],
|
133 |
+
outputs=[store_name_output])
|
134 |
+
store_description_output = gr.Textbox(label = "Store Description", lines = 1, interactive = True, visible = True)
|
135 |
store_description_output.change(fn=update_visibility,
|
136 |
inputs=[store_description_output],
|
137 |
outputs=[store_description_output])
|
138 |
+
store_reputation_output = gr.Textbox(label = "Store Reputation", lines = 1, interactive = True, visible = True)
|
139 |
+
store_backstory_output = gr.Textbox(label = "Store Backstory", lines = 1, interactive = True, visible = True)
|
140 |
+
store_sd_prompt_output = gr.Textbox(label = "Store Image Prompt", lines = 1, interactive = True, visible = True)
|
141 |
+
store_type_output = gr.Textbox(label = "Store Type", lines = 1, interactive = True, visible = True)
|
142 |
+
store_size_output = gr.Textbox(label = "Store Size", lines = 1, interactive = True, visible = True)
|
143 |
+
store_location_output = gr.Textbox(label = "Store Location", lines = 1, interactive = True, visible = True)
|
144 |
+
store_owner_output = gr.Textbox(label = "Owners", lines = 1, interactive = True, visible = True)
|
145 |
+
store_employees_output = gr.Textbox(label = "Employees", lines = 1, interactive = True, visible = True)
|
146 |
+
notable_customers_output = gr.Textbox(label = "Notable Customers", lines = 1, interactive = True, visible = True)
|
147 |
+
store_hours_output = gr.Textbox(label = "Hours", lines = 1, interactive = True, visible = True)
|
148 |
+
store_services_output = gr.Textbox(label = "Services", lines = 1, interactive = True, visible = True)
|
149 |
+
store_specialties_output = gr.Textbox(label = "Specialties", lines = 1, interactive = True, visible = True)
|
150 |
+
store_quests_output = gr.Textbox(label = "Quests", lines = 1, interactive = True, visible = True)
|
151 |
+
store_rumors_output = gr.Textbox(label = "Rumors", lines = 1, interactive = True, visible = True)
|
152 |
+
|
153 |
|
154 |
+
desc_gen.click(fn = gen_store_desc, inputs = [user_store_dict],
|
155 |
+
outputs= [
|
156 |
+
store_name, store_name_output,
|
157 |
+
store_description, store_description_output,
|
158 |
+
store_reputation, store_reputation_output,
|
159 |
+
store_backstory, store_backstory_output,
|
160 |
+
store_sd_prompt,store_sd_prompt_output,
|
161 |
+
store_type, store_type_output,
|
162 |
+
store_size, store_size_output,
|
163 |
+
store_location, store_location_output,
|
164 |
+
store_owner, store_owner_output,
|
165 |
+
store_employees, store_employees_output,
|
166 |
+
notable_customers, notable_customers_output,
|
167 |
+
store_hours, store_hours_output,
|
168 |
+
store_services,store_services_output,
|
169 |
+
store_specialties,store_specialties_output,
|
170 |
+
store_quests, store_quests_output,
|
171 |
+
store_rumors, store_rumors_output
|
172 |
+
])
|
173 |
+
|
174 |
image_path_list= u.absolute_path("./folder_with_images")
|
175 |
|
176 |
+
with gr.Tab("Inventory"):
|
177 |
+
inv_gen = gr.Button(value = "Click to Generate Inventory")
|
178 |
+
store_inventory_output = gr.Textbox(label = 'Inventory', lines = 16, interactive=True, visible=True)
|
179 |
+
store_inventory_output.change(fn=update_visibility,
|
180 |
+
inputs=[store_inventory_output],
|
181 |
+
outputs=[store_inventory_output])
|
182 |
+
inv_gen.click(fn = gen_store_inventory, inputs = [store_name, store_type, store_size, store_owner, store_reputation],
|
183 |
+
outputs= [store_inventory, store_inventory_output
|
184 |
+
])
|
185 |
+
dict_gen = gr.Button(value = "Click to convert test to data object")
|
186 |
+
store_inventory_dict_output = gr.Textbox(label = 'Inventory', lines = 16, interactive=True, visible=True)
|
187 |
+
|
188 |
+
dict_gen.click(fn = inventory_to_dict, inputs = [store_inventory_output],
|
189 |
+
outputs= [store_inventory_dict, store_inventory_dict_output
|
190 |
])
|
191 |
+
|
192 |
|
193 |
image_path_list= u.absolute_path("./folder_with_images")
|
194 |
if __name__ == "__main__":
|
dependencies/5ePHBstyle.css
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity.woff2');font-weight:normal;font-style:normal}@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity Bold.woff2');font-weight:bold;font-style:normal}@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity Italic.woff2');font-weight:normal;font-style:italic}@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity Bold Italic.woff2');font-weight:bold;font-style:italic}@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans.woff2');font-weight:normal;font-style:normal}@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans Bold.woff2');font-weight:bold;font-style:normal}@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans Italic.woff2');font-weight:normal;font-style:italic}@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans Bold Italic.woff2');font-weight:bold;font-style:italic}@font-face{font-family:ScalySansSmallCapsRemake;src:url('./themes/fonts/5e/Scaly Sans Caps.woff2');font-weight:normal;font-style:normal}@font-face{font-family:WalterTurncoat;src:url('./themes/fonts/5e/WalterTurncoat-Regular.woff2');font-weight:normal;font-style:normal}@font-face{font-family:MrEavesRemake;src:url('./themes/fonts/5e/Mr Eaves Small Caps.woff2');font-weight:normal;font-style:normal}@font-face{font-family:SolberaImitationRemake;src:url('./themes/fonts/5e/Solbera Imitation Tweak.woff2');font-weight:normal;font-style:normal}@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed.woff2');font-weight:normal;font-style:normal}@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed Bold.woff2');font-weight:bold;font-style:normal}@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed Italic.woff2');font-weight:normal;font-style:italic}@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed Bold Italic.woff2');font-weight:bold;font-style:italic}@font-face{font-family:NodestoCapsWide;src:url('./themes/fonts/5e/Nodesto Caps Wide.woff2');font-weight:normal;font-style:normal}@font-face{font-family:Overpass;src:url('./themes/fonts/5e/Overpass Medium.woff2');font-weight:500;font-style:normal}@font-face{font-family:Davek;src:url('./themes/fonts/5e/Davek.woff2');font-weight:500;font-style:normal}@font-face{font-family:Iokharic;src:url('./themes/fonts/5e/Iokharic.woff2');font-weight:500;font-style:normal}@font-face{font-family:Rellanic;src:url('./themes/fonts/5e/Rellanic.woff2');font-weight:500;font-style:normal}:root{--HB_Color_Background:#EEE5CE;--HB_Color_Accent:#E0E5C1;--HB_Color_HeaderUnderline:#C0AD6A;--HB_Color_HorizontalRule:#9C2B1B;--HB_Color_HeaderText:#58180D;--HB_Color_MonsterStatBackground:#F2E5B5;--HB_Color_CaptionText:#766649;--HB_Color_WatercolorStain:#BBAD82;--HB_Color_Footnotes:#C9AD6A}@page{margin:0}body{counter-reset:phb-page-numbers}*{-webkit-print-color-adjust:exact}.columnWrapper{column-gap:inherit;max-height:100%;column-span:all;columns:inherit}.page{column-count:2;column-fill:auto;column-gap:.9cm;column-width:8cm;-webkit-column-count:2;-moz-column-count:2;-webkit-column-width:8cm;-moz-column-width:8cm;-webkit-column-gap:.9cm;-moz-column-gap:.9cm;position:relative;z-index:15;box-sizing:border-box;width:215.9mm;height:279.4mm;padding:1.4cm 1.9cm 1.7cm;overflow:hidden;font-family:"BookInsanityRemake";font-size:.34cm;counter-increment:phb-page-numbers;background-color:var(--HB_Color_Background);background-image:url('./themes/assets/parchmentBackground.jpg');text-rendering:optimizeLegibility;page-break-before:always;page-break-after:always}.page p{display:block;line-height:1.25em;overflow-wrap:break-word}.page p+*{margin-top:.325cm}.page p+p{margin-top:0}.page ul{padding-left:1.4em;margin-bottom:.8em;line-height:1.25em;list-style-position:outside;list-style-type:disc}.page ol{padding-left:1.4em;margin-bottom:.8em;line-height:1.25em;list-style-position:outside;list-style-type:decimal}.page p+p,.page ul+p,.page ol+p{text-indent:1em}.page img{z-index:-1}.page strong{font-weight:bold;letter-spacing:-0.02em}.page em{font-style:italic}.page sup{font-size:smaller;line-height:0;vertical-align:super}.page sub{font-size:smaller;line-height:0;vertical-align:sub}.page h1,.page h2,.page h3,.page h4{font-family:"MrEavesRemake";font-weight:800;color:var(--HB_Color_HeaderText)}.page h1{margin-bottom:.18cm;column-span:all;font-size:.89cm;line-height:1em;-webkit-column-span:all;-moz-column-span:all}.page h1+p::first-letter{float:left;padding-bottom:2px;padding-left:40px;margin-top:-0.3cm;margin-bottom:-20px;margin-left:-40px;font-family:"SolberaImitationRemake";font-size:3.5cm;line-height:1em;color:rgba(0,0,0,0);background-image:linear-gradient(-45deg, #322814, #998250, #322814);-webkit-background-clip:text;background-clip:text}.page h1+p::first-line{font-variant:small-caps}.page h2{font-size:.75cm;line-height:.988em}.page h3{font-size:.575cm;line-height:.995em;border-bottom:2px solid var(--HB_Color_HeaderUnderline)}.page h3+*{margin-top:.17cm}.page *+h3{margin-top:.155cm}.page h4{font-size:.458cm;line-height:.971em}.page h4+*{margin-top:.09cm}.page *+h4{margin-top:.235cm}.page h5{font-family:"ScalySansSmallCapsRemake";font-size:.423cm;font-weight:900;line-height:.951em}.page h5+*{margin-top:.2cm}.page table{font-family:"ScalySansRemake";font-size:.318cm;line-height:1.2em;width:100%;line-height:16px}.page table p,.page table dl,.page table ul,.page table ol{line-height:1.2em}.page table ul,.page table ol{padding-left:1em}.page table em{font-style:italic}.page table strong{font-weight:800;letter-spacing:-0.02em}.page table h5+*{margin-top:.1cm}.page table+*{margin-top:.325cm}.page table thead{display:table-row-group;font-weight:800}.page table thead th{padding:0 1.5px;vertical-align:bottom}.page table tbody tr td{padding:0 1.5px}.page table tbody tr:nth-child(odd){background-color:var(--HB_Color_Accent)}.page .quote>p{font-style:italic;line-height:.54cm}.page .quote>p:first-child::first-line{font-size:.38cm;font-style:normal;font-variant:small-caps}.page .quote p+.attribution{margin-top:0}.page .quote .attribution{display:block;font-style:normal;line-height:.54cm;text-align:right}.page .quote .attribution::before{margin-right:.2em;content:'---'}.page .quote+*{margin-top:.54cm}.page .note{font-family:"ScalySansRemake";font-size:.318cm;line-height:1.2em;padding:.13cm .16cm;background-color:var(--HB_Color_Accent);border-style:solid;border-width:1px;border-image:url('../dependencies/themes/assets/noteBorder.png') 12 stretch;border-image-width:11px;border-image-outset:9px 0px;box-shadow:1px 4px 14px #888888}.page .note p,.page .note dl,.page .note ul,.page .note ol{line-height:1.2em}.page .note ul,.page .note ol{padding-left:1em}.page .note em{font-style:italic}.page .note strong{font-weight:800;letter-spacing:-0.02em}.page .note h5+*{margin-top:.1cm}.page :where(.page .note){margin-top:9px}.page .note+*{margin-top:.45cm}.page .note h5{font-size:.375cm}.page .note p{display:block;padding-bottom:0px}.page .note :last-child{margin-bottom:0}.page .descriptive{font-family:"ScalySansRemake";font-size:.318cm;line-height:1.2em;padding:.1em;background-color:#FAF7EA;border-style:solid;border-width:7px;border-image:url('themes/assets/descriptiveBorder.png') 12 stretch;border-image-outset:4px;box-shadow:0 0 6px #FAF7EA}.page .descriptive p,.page .descriptive dl,.page .descriptive ul,.page .descriptive ol{line-height:1.2em}.page .descriptive ul,.page .descriptive ol{padding-left:1em}.page .descriptive em{font-style:italic}.page .descriptive strong{font-weight:800;letter-spacing:-0.02em}.page .descriptive h5+*{margin-top:.1cm}.page :where(.page .descriptive){margin-top:4px}.page .descriptive+*{margin-top:.45cm}.page .descriptive h5{font-size:.375cm}.page .descriptive p{display:block;padding-bottom:0px;line-height:1.5em}.page .descriptive :last-child{margin-bottom:0}.page .artist{position:absolute;width:auto;font-family:"WalterTurncoat";font-size:.27cm;color:var(--HB_Color_CaptionText);text-align:center}.page .artist p,.page .artist p+p{margin:unset;line-height:1em;text-indent:unset}.page .artist h5{font-family:"WalterTurncoat";font-size:1.3em}.page .artist a{color:inherit;text-decoration:unset}.page .artist a:hover{text-decoration:underline}.page .watermark{position:absolute;top:0;left:0;z-index:500;display:grid !important;place-items:center;justify-content:center;width:100%;height:100%;font-size:120px;color:black;text-transform:uppercase;mix-blend-mode:overlay;opacity:30%;transform:rotate(-45deg)}.page .watermark p{margin-bottom:none}.page [class*='watercolor']{position:absolute;z-index:-2;width:2000px;height:2000px;background-color:var(--HB_Color_WatercolorStain);background-size:cover;-webkit-mask-image:var(--wc);-webkit-mask-size:contain;-webkit-mask-repeat:no-repeat;mask-image:var(--wc);mask-size:contain;mask-repeat:no-repeat;--wc:url('/assets/watercolor/watercolor1.png')}.page .watercolor1{--wc:url('/assets/watercolor/watercolor1.png')}.page .watercolor2{--wc:url('/assets/watercolor/watercolor2.png')}.page .watercolor3{--wc:url('/assets/watercolor/watercolor3.png')}.page .watercolor4{--wc:url('/assets/watercolor/watercolor4.png')}.page .watercolor5{--wc:url('/assets/watercolor/watercolor5.png')}.page .watercolor6{--wc:url('/assets/watercolor/watercolor6.png')}.page .watercolor7{--wc:url('/assets/watercolor/watercolor7.png')}.page .watercolor8{--wc:url('/assets/watercolor/watercolor8.png')}.page .watercolor9{--wc:url('/assets/watercolor/watercolor9.png')}.page .watercolor10{--wc:url('/assets/watercolor/watercolor10.png')}.page .watercolor11{--wc:url('/assets/watercolor/watercolor11.png')}.page .watercolor12{--wc:url('/assets/watercolor/watercolor12.png')}.page .monster{font-family:"ScalySansRemake";font-size:.318cm;line-height:1.2em;position:relative;padding:0px;margin-bottom:.325cm}.page .monster p,.page .monster dl,.page .monster ul,.page .monster ol{line-height:1.2em}.page .monster ul,.page .monster ol{padding-left:1em}.page .monster em{font-style:italic}.page .monster strong{font-weight:800;letter-spacing:-0.02em}.page .monster h5+*{margin-top:.1cm}.page .monster.frame{width:calc(100% + .32cm);padding:4px 2px;margin-right:-0.16cm;margin-left:-0.16cm;background-color:var(--HB_Color_MonsterStatBackground);background-image:url('./themes/assets/parchmentBackgroundGrayscale.jpg');background-attachment:fixed;background-blend-mode:overlay;border-style:solid;border-width:7px 6px;border-image:url('./themes/assets/monsterBorderFancy.png') 14 round;border-image-outset:0px 2px;box-shadow:1px 4px 14px #888888}.page .monster h2{margin:0;font-size:.62cm;line-height:1em}.page .monster h2+p{margin-bottom:0;font-size:.304cm}.page .monster h3{padding-bottom:.05cm;font-family:"ScalySansRemake";font-weight:800;font-variant:small-caps;border-bottom:2px solid var(--HB_Color_HeaderText)}.page .monster hr{height:6px;margin:.12cm 0;visibility:visible;background-image:url('./themes/assets/redTriangle.png');background-size:100% 100%;border:none}.page .monster hr~:is(dl,p){color:var(--HB_Color_HeaderText)}.page .monster hr:last-of-type~:is(dl,p){color:inherit}.page .monster hr:last-of-type+*{margin-top:.325cm}.page .monster hr+table:first-of-type{margin:0;column-span:none;color:var(--HB_Color_HeaderText);background-color:transparent;border-style:none;border-image:none;-webkit-column-span:none}.page .monster hr+table:first-of-type tr{background-color:transparent}.page .monster hr+table:first-of-type td,.page .monster hr+table:first-of-type th{padding:0px}.page .monster :last-child{margin-bottom:0}.page .monster.wide{column-count:2;column-fill:balance;column-gap:.9cm;column-width:7.68cm;-webkit-column-count:2;-moz-column-count:2;-webkit-column-width:7.68cm;-moz-column-width:7.68cm;-webkit-column-gap:.9cm;-moz-column-gap:.9cm}.page:after{position:absolute;bottom:0px;left:0px;z-index:100;width:100%;height:50px;content:'';background-image:url('./themes/assets/PHB_footerAccent.png');background-size:cover}.page:nth-child(even)::after{transform:scaleX(-1)}.page:nth-child(even) .pageNumber{left:2px}.page:nth-child(even) .footnote{left:80px;text-align:left}.page .pageNumber{position:absolute;right:2px;bottom:22px;width:50px;font-size:.9em;color:var(--HB_Color_Footnotes);text-align:center;text-indent:0}.page .pageNumber.auto::after{content:counter(phb-page-numbers)}.page .footnote{position:absolute;right:80px;bottom:32px;z-index:150;width:200px;font-size:.8em;color:var(--HB_Color_Footnotes);text-align:right}.page code{padding:0px 4px;font-family:'Courier New',"Courier",monospace;font-size:.325;color:#58180D;overflow-wrap:break-word;white-space:pre-wrap;background-color:#FAF7EA;border-radius:4px}.page pre code{display:inline-block;width:100%;padding:.15cm;margin-bottom:2px;border-style:solid;border-width:1px;border-radius:12px;border-image:url('/assets/codeBorder.png') 26 stretch;border-image-width:10px;border-image-outset:2px}.page :where(.page pre code){margin-top:2px}.page pre code+*{margin-top:.325cm}.page hr{margin:0px;visibility:hidden}.page .columnSplit{visibility:hidden;-webkit-column-break-after:always;break-after:always;-moz-column-break-after:always}.page blockquote,.page table{z-index:15;-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}.page table+p{text-indent:1em}.page ul ul,.page ol ol,.page ul ol,.page ol ul{margin-bottom:0px;margin-left:1.5em}.page li{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}.page .spellList{font-family:"ScalySansRemake";font-size:.318cm;line-height:1.2em;column-count:2}.page .spellList p,.page .spellList dl,.page .spellList ul,.page .spellList ol{line-height:1.2em}.page .spellList ul,.page .spellList ol{padding-left:1em}.page .spellList em{font-style:italic}.page .spellList strong{font-weight:800;letter-spacing:-0.02em}.page .spellList h5+*{margin-top:.1cm}.page .spellList ul+h5{margin-top:15px}.page .spellList p,.page .spellList ul{font-size:.352cm;line-height:1.265em}.page .spellList ul{padding-left:1em;margin-bottom:.5em;text-indent:-1em;list-style-type:none;-webkit-column-break-inside:auto;page-break-inside:auto;break-inside:auto}.page .spellList.wide{column-count:4}
|
2 |
+
.page .classTable th[colspan]:not([rowspan]){white-space:nowrap}
|
3 |
+
.page .classTable.frame{width:calc(100% + .2cm);
|
4 |
+
margin-top:.7cm;
|
5 |
+
margin-right:-0.1cm;
|
6 |
+
margin-bottom:.9cm;
|
7 |
+
margin-left:-0.1cm;
|
8 |
+
border-collapse:separate;
|
9 |
+
background-color:white;
|
10 |
+
border:initial;
|
11 |
+
border-style:solid;
|
12 |
+
border-image-source:url('../dependencies/themes/assets/frameBorder.png');
|
13 |
+
border-image-slice:200;
|
14 |
+
border-image-width:47px;
|
15 |
+
border-image-outset:.4cm .3cm;
|
16 |
+
border-image-repeat:stretch}
|
17 |
+
.page.classTable.frame.wide:first-child{margin-top:.12cm}
|
18 |
+
.page .classTable.frame+*{margin-top:0}
|
19 |
+
.page .classTable.decoration{position:relative}
|
20 |
+
.page .classTable.decoration::before{position:absolute;top:50%;left:50%;z-index:-1;width:7.75cm;height:calc(100% + 3.3cm);content:'';background-image:url('../../dependencies/assets/classTableDecoration.png'),url('/assets/classTableDecoration.png');filter:drop-shadow(0 0 1px #C8C5C080);background-repeat:no-repeat,no-repeat;background-position:top, bottom;background-size:contain, contain;transform:translateY(-50%) translateX(-50%)}.page .classTable.decoration.wide::before{width:calc(100% + 3.3cm);height:7.75cm;background-position:left, right}.page .classTable h5+table{margin-top:.2cm}.page:has(.frontCover){columns:1;text-align:center}.page:has(.frontCover)::after{all:unset}.page:has(.frontCover) h1{margin-top:1.2cm;margin-bottom:0;font-family:"NodestoCapsCondensed";font-size:2.245cm;font-weight:normal;line-height:.85em;color:white;text-shadow:unset;text-transform:uppercase;filter:drop-shadow(0 0 1.5px black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)}.page:has(.frontCover) h2{font-family:"NodestoCapsCondensed";font-size:.85cm;font-weight:normal;color:white;letter-spacing:.1cm;filter:drop-shadow(0 0 1px black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)}.page:has(.frontCover) hr{position:relative;display:block;width:12cm;height:.5cm;margin:auto;visibility:visible;background-image:url('/assets/horizontalRule.svg');filter:drop-shadow(0 0 3px black);background-size:100% 100%;border:none}.page:has(.frontCover) .banner{position:absolute;bottom:4.2cm;left:0;display:flex;flex-direction:column;justify-content:center;width:10.5cm;height:1.7cm;padding-top:.1cm;padding-left:1cm;font-family:"NodestoCapsCondensed";font-size:1cm;font-weight:normal;color:white;text-align:left;letter-spacing:.014cm;background-image:url('/assets/coverPageBanner.svg');filter:drop-shadow(2px 2px 2px black)}.page:has(.frontCover) .footnote{position:absolute;right:0;bottom:1.3cm;left:0;width:70%;margin-right:auto;margin-left:auto;font-family:"Overpass";font-size:.496cm;color:white;text-align:center;filter:drop-shadow(0 0 .7px black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)}.page:has(.frontCover) .logo{position:absolute;top:.5cm;right:0;left:0;filter:drop-shadow(0 0 .075cm black)}.page:has(.frontCover) .logo img{width:100%;height:2cm}.page:has(.insideCover){columns:1;text-align:center}.page:has(.insideCover)::after{all:unset}.page:has(.insideCover) h1{margin-top:1.2cm;margin-bottom:0;font-family:"NodestoCapsCondensed";font-size:2.1cm;font-weight:normal;line-height:.85em;text-transform:uppercase}.page:has(.insideCover) h2{font-family:"NodestoCapsCondensed";font-size:.85cm;font-weight:normal;letter-spacing:.5cm}.page:has(.insideCover) hr{position:relative;display:block;width:12cm;height:.5cm;margin:auto;visibility:visible;background-image:url('/assets/horizontalRule.svg');background-size:100% 100%;border:none}.page:has(.insideCover) .logo{position:absolute;right:0;bottom:1cm;left:0;height:2cm}.page:has(.insideCover) .logo img{width:100%;height:2cm}.page:has(.backCover){padding:2.25cm 1.3cm 2cm 1.3cm;color:#FFFFFF;columns:1}.page:has(.backCover)::after{all:unset}.page:has(.backCover) .columnWrapper{width:7.6cm}.page:has(.backCover) .backCover{position:absolute;inset:0;z-index:-1;width:11cm;background-image:url('/assets/backCover.png');background-repeat:no-repeat;background-size:contain}.page:has(.backCover) .blank{height:1.4em}.page:has(.backCover) h1{margin-bottom:.3cm;font-family:"NodestoCapsCondensed";font-size:1.35cm;line-height:.95em;color:#ED1C24;text-align:center}.page:has(.backCover) h1+p::first-line,.page:has(.backCover) h1+p::first-letter{all:unset}.page:has(.backCover) img{position:absolute;top:0px;z-index:-2;height:100%}.page:has(.backCover) hr{width:4.5cm;height:.53cm;margin-top:1.1cm;margin-right:auto;margin-left:auto;visibility:visible;background-image:url('/assets/horizontalRule.svg');background-size:100% 100%;border:none}.page:has(.backCover) p{font-family:"Overpass";font-size:.332cm;line-height:1.5em}.page:has(.backCover) hr+p{margin-top:.6cm;text-align:center}.page:has(.backCover) .logo{position:absolute;bottom:2cm;left:1.2cm;z-index:0;width:7.6cm;height:1.5cm}.page:has(.backCover) .logo img{position:relative;z-index:0;width:100%;height:1.5cm}.page:has(.backCover) .logo p{position:relative;width:100%;font-family:"NodestoCapsWide";font-size:.4cm;line-height:1em;color:#FFFFFF;text-align:center;text-indent:0;letter-spacing:.08em}.page:has(.partCover){padding-top:0;text-align:center;columns:1}.page:has(.partCover) .partCover{position:absolute;top:0;left:0;width:100%;height:6cm;background-image:url('/assets/partCoverHeaderPHB.png');background-repeat:no-repeat;background-size:100%}.page:has(.partCover) h1{position:relative;margin-top:.4cm;font-family:"NodestoCapsCondensed";font-size:2.3cm;text-align:center;text-transform:uppercase}.page:has(.partCover) h2{position:relative;margin-top:-0.7em;margin-right:auto;margin-left:auto;font-family:"Overpass";font-size:.45cm;line-height:1.1em}.page:has(.toc)::after{display:none}.page .toc{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}.page .toc h1{margin-bottom:.3cm;text-align:center}.page .toc a{display:inline;color:inherit;text-decoration:none}.page .toc a:hover{text-decoration:underline}.page .toc h4{margin-top:.2cm;line-height:.4cm}.page .toc h4+ul li{line-height:1.2em}.page .toc ul{padding-left:0;margin-top:0;list-style-type:none}.page .toc ul a{display:flex;flex-flow:row nowrap;justify-content:space-between;width:100%}.page .toc ul li+li h3{margin-top:.26cm;line-height:1em}.page .toc ul h3 span:first-child::after{border:none}.page .toc ul span{display:contents}.page .toc ul span:first-child::after{bottom:.08cm;flex:1;margin-right:.16cm;margin-bottom:.08cm;margin-left:.08cm;content:'';border-bottom:.05cm dotted #000000}.page .toc ul span:last-child{display:inline-block;align-self:flex-end;font-family:'BookInsanityRemake';font-size:.34cm;font-weight:normal;color:#000000}.page .toc ul ul{margin-left:1em}.page .toc.wide{column-count:2;column-fill:balance;column-gap:.9cm;column-width:7.68cm;-webkit-column-count:2;-moz-column-count:2;-webkit-column-width:7.68cm;-moz-column-width:7.68cm;-webkit-column-gap:.9cm;-moz-column-gap:.9cm}.page dl{padding-left:1em;line-height:1.25em;white-space:pre-line}.page dl+*{margin-top:.28cm}.page dl+*{margin-top:.17cm}.page p+dl{margin-top:.17cm}.page dt{display:inline;margin-right:5px;margin-left:-1em}.page dd{display:inline;margin-left:0px;text-indent:0px}.page .wide{margin-bottom:.325cm}.page h1+*{margin-top:0}.page .runeTable{margin-block:.7cm}.page .runeTable table{font-family:inherit}.page .runeTable table tbody tr{background:unset}.page .runeTable table th,.page .runeTable table td{width:1.3cm;height:1.3cm;font-weight:normal;text-transform:uppercase;vertical-align:middle;outline:1px solid #000000}.page .runeTable table th{font-family:"BookInsanityRemake";font-size:.45cm}.page .runeTable table td{font-size:.7cm}.page .runeTable.frame{border:initial;border-style:solid;border-image-source:url('/assets/scriptBorder.png');border-image-slice:170;border-image-width:1.4cm;border-image-outset:.45cm .35cm .4cm .4cm;border-image-repeat:stretch}.page .index{font-size:.218cm}.page .index ul ul{margin:0}.page .index ul{padding-left:0;text-indent:0;list-style-type:none}.page .index>ul>li{padding-left:1.5em;text-indent:-1.5em}
|
dependencies/all.css
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com
|
3 |
+
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
4 |
+
*/
|
5 |
+
.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
|
dependencies/bundle.css
ADDED
The diff for this file is too large to render.
See raw diff
|
|
dependencies/css.css
ADDED
@@ -0,0 +1,288 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* cyrillic-ext */
|
2 |
+
@font-face {
|
3 |
+
font-family: 'Open Sans';
|
4 |
+
font-style: normal;
|
5 |
+
font-weight: 300;
|
6 |
+
font-stretch: 100%;
|
7 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
|
8 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
9 |
+
}
|
10 |
+
/* cyrillic */
|
11 |
+
@font-face {
|
12 |
+
font-family: 'Open Sans';
|
13 |
+
font-style: normal;
|
14 |
+
font-weight: 300;
|
15 |
+
font-stretch: 100%;
|
16 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
|
17 |
+
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
18 |
+
}
|
19 |
+
/* greek-ext */
|
20 |
+
@font-face {
|
21 |
+
font-family: 'Open Sans';
|
22 |
+
font-style: normal;
|
23 |
+
font-weight: 300;
|
24 |
+
font-stretch: 100%;
|
25 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
|
26 |
+
unicode-range: U+1F00-1FFF;
|
27 |
+
}
|
28 |
+
/* greek */
|
29 |
+
@font-face {
|
30 |
+
font-family: 'Open Sans';
|
31 |
+
font-style: normal;
|
32 |
+
font-weight: 300;
|
33 |
+
font-stretch: 100%;
|
34 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
|
35 |
+
unicode-range: U+0370-03FF;
|
36 |
+
}
|
37 |
+
/* hebrew */
|
38 |
+
@font-face {
|
39 |
+
font-family: 'Open Sans';
|
40 |
+
font-style: normal;
|
41 |
+
font-weight: 300;
|
42 |
+
font-stretch: 100%;
|
43 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
|
44 |
+
unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
|
45 |
+
}
|
46 |
+
/* vietnamese */
|
47 |
+
@font-face {
|
48 |
+
font-family: 'Open Sans';
|
49 |
+
font-style: normal;
|
50 |
+
font-weight: 300;
|
51 |
+
font-stretch: 100%;
|
52 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
|
53 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
54 |
+
}
|
55 |
+
/* latin-ext */
|
56 |
+
@font-face {
|
57 |
+
font-family: 'Open Sans';
|
58 |
+
font-style: normal;
|
59 |
+
font-weight: 300;
|
60 |
+
font-stretch: 100%;
|
61 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
|
62 |
+
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
63 |
+
}
|
64 |
+
/* latin */
|
65 |
+
@font-face {
|
66 |
+
font-family: 'Open Sans';
|
67 |
+
font-style: normal;
|
68 |
+
font-weight: 300;
|
69 |
+
font-stretch: 100%;
|
70 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
|
71 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
72 |
+
}
|
73 |
+
/* cyrillic-ext */
|
74 |
+
@font-face {
|
75 |
+
font-family: 'Open Sans';
|
76 |
+
font-style: normal;
|
77 |
+
font-weight: 400;
|
78 |
+
font-stretch: 100%;
|
79 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
|
80 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
81 |
+
}
|
82 |
+
/* cyrillic */
|
83 |
+
@font-face {
|
84 |
+
font-family: 'Open Sans';
|
85 |
+
font-style: normal;
|
86 |
+
font-weight: 400;
|
87 |
+
font-stretch: 100%;
|
88 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
|
89 |
+
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
90 |
+
}
|
91 |
+
/* greek-ext */
|
92 |
+
@font-face {
|
93 |
+
font-family: 'Open Sans';
|
94 |
+
font-style: normal;
|
95 |
+
font-weight: 400;
|
96 |
+
font-stretch: 100%;
|
97 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
|
98 |
+
unicode-range: U+1F00-1FFF;
|
99 |
+
}
|
100 |
+
/* greek */
|
101 |
+
@font-face {
|
102 |
+
font-family: 'Open Sans';
|
103 |
+
font-style: normal;
|
104 |
+
font-weight: 400;
|
105 |
+
font-stretch: 100%;
|
106 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
|
107 |
+
unicode-range: U+0370-03FF;
|
108 |
+
}
|
109 |
+
/* hebrew */
|
110 |
+
@font-face {
|
111 |
+
font-family: 'Open Sans';
|
112 |
+
font-style: normal;
|
113 |
+
font-weight: 400;
|
114 |
+
font-stretch: 100%;
|
115 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
|
116 |
+
unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
|
117 |
+
}
|
118 |
+
/* vietnamese */
|
119 |
+
@font-face {
|
120 |
+
font-family: 'Open Sans';
|
121 |
+
font-style: normal;
|
122 |
+
font-weight: 400;
|
123 |
+
font-stretch: 100%;
|
124 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
|
125 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
126 |
+
}
|
127 |
+
/* latin-ext */
|
128 |
+
@font-face {
|
129 |
+
font-family: 'Open Sans';
|
130 |
+
font-style: normal;
|
131 |
+
font-weight: 400;
|
132 |
+
font-stretch: 100%;
|
133 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
|
134 |
+
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
135 |
+
}
|
136 |
+
/* latin */
|
137 |
+
@font-face {
|
138 |
+
font-family: 'Open Sans';
|
139 |
+
font-style: normal;
|
140 |
+
font-weight: 400;
|
141 |
+
font-stretch: 100%;
|
142 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
|
143 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
144 |
+
}
|
145 |
+
/* cyrillic-ext */
|
146 |
+
@font-face {
|
147 |
+
font-family: 'Open Sans';
|
148 |
+
font-style: normal;
|
149 |
+
font-weight: 600;
|
150 |
+
font-stretch: 100%;
|
151 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
|
152 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
153 |
+
}
|
154 |
+
/* cyrillic */
|
155 |
+
@font-face {
|
156 |
+
font-family: 'Open Sans';
|
157 |
+
font-style: normal;
|
158 |
+
font-weight: 600;
|
159 |
+
font-stretch: 100%;
|
160 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
|
161 |
+
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
162 |
+
}
|
163 |
+
/* greek-ext */
|
164 |
+
@font-face {
|
165 |
+
font-family: 'Open Sans';
|
166 |
+
font-style: normal;
|
167 |
+
font-weight: 600;
|
168 |
+
font-stretch: 100%;
|
169 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
|
170 |
+
unicode-range: U+1F00-1FFF;
|
171 |
+
}
|
172 |
+
/* greek */
|
173 |
+
@font-face {
|
174 |
+
font-family: 'Open Sans';
|
175 |
+
font-style: normal;
|
176 |
+
font-weight: 600;
|
177 |
+
font-stretch: 100%;
|
178 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
|
179 |
+
unicode-range: U+0370-03FF;
|
180 |
+
}
|
181 |
+
/* hebrew */
|
182 |
+
@font-face {
|
183 |
+
font-family: 'Open Sans';
|
184 |
+
font-style: normal;
|
185 |
+
font-weight: 600;
|
186 |
+
font-stretch: 100%;
|
187 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
|
188 |
+
unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
|
189 |
+
}
|
190 |
+
/* vietnamese */
|
191 |
+
@font-face {
|
192 |
+
font-family: 'Open Sans';
|
193 |
+
font-style: normal;
|
194 |
+
font-weight: 600;
|
195 |
+
font-stretch: 100%;
|
196 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
|
197 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
198 |
+
}
|
199 |
+
/* latin-ext */
|
200 |
+
@font-face {
|
201 |
+
font-family: 'Open Sans';
|
202 |
+
font-style: normal;
|
203 |
+
font-weight: 600;
|
204 |
+
font-stretch: 100%;
|
205 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
|
206 |
+
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
207 |
+
}
|
208 |
+
/* latin */
|
209 |
+
@font-face {
|
210 |
+
font-family: 'Open Sans';
|
211 |
+
font-style: normal;
|
212 |
+
font-weight: 600;
|
213 |
+
font-stretch: 100%;
|
214 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
|
215 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
216 |
+
}
|
217 |
+
/* cyrillic-ext */
|
218 |
+
@font-face {
|
219 |
+
font-family: 'Open Sans';
|
220 |
+
font-style: normal;
|
221 |
+
font-weight: 700;
|
222 |
+
font-stretch: 100%;
|
223 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2');
|
224 |
+
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
225 |
+
}
|
226 |
+
/* cyrillic */
|
227 |
+
@font-face {
|
228 |
+
font-family: 'Open Sans';
|
229 |
+
font-style: normal;
|
230 |
+
font-weight: 700;
|
231 |
+
font-stretch: 100%;
|
232 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2');
|
233 |
+
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
234 |
+
}
|
235 |
+
/* greek-ext */
|
236 |
+
@font-face {
|
237 |
+
font-family: 'Open Sans';
|
238 |
+
font-style: normal;
|
239 |
+
font-weight: 700;
|
240 |
+
font-stretch: 100%;
|
241 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2');
|
242 |
+
unicode-range: U+1F00-1FFF;
|
243 |
+
}
|
244 |
+
/* greek */
|
245 |
+
@font-face {
|
246 |
+
font-family: 'Open Sans';
|
247 |
+
font-style: normal;
|
248 |
+
font-weight: 700;
|
249 |
+
font-stretch: 100%;
|
250 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2');
|
251 |
+
unicode-range: U+0370-03FF;
|
252 |
+
}
|
253 |
+
/* hebrew */
|
254 |
+
@font-face {
|
255 |
+
font-family: 'Open Sans';
|
256 |
+
font-style: normal;
|
257 |
+
font-weight: 700;
|
258 |
+
font-stretch: 100%;
|
259 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2');
|
260 |
+
unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
|
261 |
+
}
|
262 |
+
/* vietnamese */
|
263 |
+
@font-face {
|
264 |
+
font-family: 'Open Sans';
|
265 |
+
font-style: normal;
|
266 |
+
font-weight: 700;
|
267 |
+
font-stretch: 100%;
|
268 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2');
|
269 |
+
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
270 |
+
}
|
271 |
+
/* latin-ext */
|
272 |
+
@font-face {
|
273 |
+
font-family: 'Open Sans';
|
274 |
+
font-style: normal;
|
275 |
+
font-weight: 700;
|
276 |
+
font-stretch: 100%;
|
277 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2');
|
278 |
+
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
279 |
+
}
|
280 |
+
/* latin */
|
281 |
+
@font-face {
|
282 |
+
font-family: 'Open Sans';
|
283 |
+
font-style: normal;
|
284 |
+
font-weight: 700;
|
285 |
+
font-stretch: 100%;
|
286 |
+
src: url(https://fonts.gstatic.com/s/opensans/v36/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2');
|
287 |
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
288 |
+
}
|
dependencies/homebrewery -cssPaths
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<link href="C:\AI\StatBlockGenerator\experiments\homebrewery\all.css" rel="stylesheet" />
|
2 |
+
<link href="C:\AI\StatBlockGenerator\experiments\homebrewery\css.css?family=Open+Sans:400,300,600,700" rel="stylesheet" type="text/css" />
|
3 |
+
<link href='C:\AI\StatBlockGenerator\experiments\homebrewery\bundle.css' rel='stylesheet' />
|
4 |
+
<link rel="icon" href="C:\AI\StatBlockGenerator\experiments\homebrewery\favicon.ico" type="image/x-icon" />
|
5 |
+
<link href='C:\AI\StatBlockGenerator\experiments\homebrewery\style.css' rel='stylesheet' />
|
6 |
+
<link href='C:\AI\StatBlockGenerator\experiments\homebrewery\5ePHBstyle.css' rel='stylesheet' />
|
7 |
+
|
8 |
+
<img class=" " style="width:325px; mix-blend-mode:multiply;" src="C:\AI\StatBlockGenerator\output\20231021-21\20231021-214854 [] Chocolate kiss of doom.png" alt="Chocolate Kiss of Doom">
|
dependencies/homebrewery-docker.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
docker run -it --rm -v ${PWD}:/app homebrewery node cli/process.js --input /app/my-brew.md --output /app/my-brew.html --renderer v3 --overwrite
|
dependencies/phb.standalone.css
ADDED
The diff for this file is too large to render.
See raw diff
|
|
dependencies/style.css
ADDED
@@ -0,0 +1,615 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity.woff2');font-weight:normal;font-style:normal}
|
2 |
+
@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity Bold.woff2');font-weight:bold;font-style:normal}
|
3 |
+
@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity Italic.woff2');font-weight:normal;font-style:italic}
|
4 |
+
@font-face{font-family:BookInsanityRemake;src:url('./themes/fonts/5e/Bookinsanity Bold Italic.woff2');font-weight:bold;font-style:italic}
|
5 |
+
@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans.woff2');font-weight:normal;font-style:normal}@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans Bold.woff2');font-weight:bold;font-style:normal}
|
6 |
+
@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans Italic.woff2');font-weight:normal;font-style:italic}
|
7 |
+
@font-face{font-family:ScalySansRemake;src:url('./themes/fonts/5e/Scaly Sans Bold Italic.woff2');font-weight:bold;font-style:italic}
|
8 |
+
@font-face{font-family:ScalySansSmallCapsRemake;src:url('./themes/fonts/5e/Scaly Sans Caps.woff2');font-weight:normal;font-style:normal}
|
9 |
+
@font-face{font-family:WalterTurncoat;src:url('./themes/fonts/5e/WalterTurncoat-Regular.woff2');font-weight:normal;font-style:normal}
|
10 |
+
@font-face{font-family:MrEavesRemake;src:url('./themes/fonts/5e/Mr Eaves Small Caps.woff2');font-weight:normal;font-style:normal}
|
11 |
+
@font-face{font-family:SolberaImitationRemake;src:url('./themes/fonts/5e/Solbera Imitation Tweak.woff2');font-weight:normal;font-style:normal}
|
12 |
+
@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed.woff2');font-weight:normal;font-style:normal}
|
13 |
+
@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed Bold.woff2');font-weight:bold;font-style:normal}
|
14 |
+
@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed Italic.woff2');font-weight:normal;font-style:italic}
|
15 |
+
@font-face{font-family:NodestoCapsCondensed;src:url('./themes/fonts/5e/Nodesto Caps Condensed Bold Italic.woff2');font-weight:bold;font-style:italic}
|
16 |
+
@font-face{font-family:NodestoCapsWide;src:url('./themes/fonts/5e/Nodesto Caps Wide.woff2');font-weight:normal;font-style:normal}
|
17 |
+
@font-face{font-family:Overpass;src:url('./themes/fonts/5e/Overpass Medium.woff2');font-weight:500;font-style:normal}@font-face{font-family:Davek;src:url('./themes/fonts/5e/Davek.woff2');font-weight:500;font-style:normal}
|
18 |
+
@font-face{font-family:Iokharic;src:url('./themes/fonts/5e/Iokharic.woff2');font-weight:500;font-style:normal}
|
19 |
+
@font-face{font-family:Rellanic;src:url('./themes/fonts/5e/Rellanic.woff2');font-weight:500;font-style:normal}:root{--HB_Color_Background:#FFFFFF;--HB_Color_WatercolorStain:#000000}
|
20 |
+
@page {
|
21 |
+
margin: 0;
|
22 |
+
}
|
23 |
+
|
24 |
+
body {
|
25 |
+
counter-reset: phb-page-numbers;
|
26 |
+
}
|
27 |
+
|
28 |
+
* {
|
29 |
+
-webkit-print-color-adjust: exact;
|
30 |
+
}
|
31 |
+
|
32 |
+
.page .block {
|
33 |
+
break-inside: avoid;
|
34 |
+
display: inline-block;
|
35 |
+
width: 100%;
|
36 |
+
}
|
37 |
+
|
38 |
+
.page .block img {
|
39 |
+
z-index: 0;
|
40 |
+
}
|
41 |
+
|
42 |
+
.page .inline-block {
|
43 |
+
display: inline-block;
|
44 |
+
text-indent: initial;
|
45 |
+
}
|
46 |
+
|
47 |
+
.columnWrapper {
|
48 |
+
max-height: 100%;
|
49 |
+
column-span: all;
|
50 |
+
columns: inherit;
|
51 |
+
column-gap: inherit;
|
52 |
+
column-fill: inherit;
|
53 |
+
}
|
54 |
+
|
55 |
+
.page {
|
56 |
+
column-fill: auto;
|
57 |
+
column-count: 2;
|
58 |
+
height: 279.4mm;
|
59 |
+
width: 215.9mm;
|
60 |
+
padding: 1.4cm 1.9cm 1.7cm;
|
61 |
+
counter-increment: phb-page-numbers;
|
62 |
+
background-color: var(--HB_Color_Background);
|
63 |
+
position: relative;
|
64 |
+
z-index: 15;
|
65 |
+
box-sizing: border-box;
|
66 |
+
overflow: hidden;
|
67 |
+
text-rendering: optimizeLegibility;
|
68 |
+
page-break-before: always;
|
69 |
+
page-break-after: always;
|
70 |
+
contain: size;
|
71 |
+
}
|
72 |
+
|
73 |
+
.page p {
|
74 |
+
overflow-wrap: break-word;
|
75 |
+
display: block;
|
76 |
+
}
|
77 |
+
|
78 |
+
.page strong {
|
79 |
+
font-weight: bold;
|
80 |
+
}
|
81 |
+
|
82 |
+
.page em {
|
83 |
+
font-style: italic;
|
84 |
+
}
|
85 |
+
|
86 |
+
.page sup {
|
87 |
+
vertical-align: super;
|
88 |
+
font-size: smaller;
|
89 |
+
line-height: 0;
|
90 |
+
}
|
91 |
+
|
92 |
+
.page sub {
|
93 |
+
vertical-align: sub;
|
94 |
+
font-size: smaller;
|
95 |
+
line-height: 0;
|
96 |
+
}
|
97 |
+
|
98 |
+
.page ul {
|
99 |
+
list-style-position: outside;
|
100 |
+
list-style-type: disc;
|
101 |
+
padding-left: 1.4em;
|
102 |
+
}
|
103 |
+
|
104 |
+
.page ol {
|
105 |
+
list-style-position: outside;
|
106 |
+
list-style-type: decimal;
|
107 |
+
padding-left: 1.4em;
|
108 |
+
}
|
109 |
+
|
110 |
+
.page img {
|
111 |
+
z-index: -1;
|
112 |
+
}
|
113 |
+
|
114 |
+
.page h1,
|
115 |
+
.page h2,
|
116 |
+
.page h3,
|
117 |
+
.page h4,
|
118 |
+
.page h5,
|
119 |
+
.page h6 {
|
120 |
+
font-weight: bold;
|
121 |
+
line-height: 1.2em;
|
122 |
+
}
|
123 |
+
|
124 |
+
.page h1 {
|
125 |
+
font-size: 2em;
|
126 |
+
}
|
127 |
+
|
128 |
+
.page h2 {
|
129 |
+
font-size: 1.5em;
|
130 |
+
}
|
131 |
+
|
132 |
+
.page h3 {
|
133 |
+
font-size: 1.17em;
|
134 |
+
}
|
135 |
+
|
136 |
+
.page h4 {
|
137 |
+
font-size: 1em;
|
138 |
+
}
|
139 |
+
|
140 |
+
.page h5 {
|
141 |
+
font-size: 0.83em;
|
142 |
+
}
|
143 |
+
|
144 |
+
.page table {
|
145 |
+
width: 100%;
|
146 |
+
}
|
147 |
+
|
148 |
+
.page table thead {
|
149 |
+
display: table-row-group;
|
150 |
+
font-weight: bold;
|
151 |
+
}
|
152 |
+
|
153 |
+
.page div:not(.columnWrapper) > table + table {
|
154 |
+
margin-top: 0;
|
155 |
+
}
|
156 |
+
.page .classTable th[colspan]:not([rowspan]) {
|
157 |
+
white-space: nowrap;
|
158 |
+
}
|
159 |
+
.page .classTable.frame {
|
160 |
+
width: calc(100% + .2cm);
|
161 |
+
margin-top: .7cm;
|
162 |
+
margin-right: -0.1cm;
|
163 |
+
margin-bottom: .9cm;
|
164 |
+
margin-left: -0.1cm;
|
165 |
+
border-collapse: separate;
|
166 |
+
background-color: white;
|
167 |
+
border: initial;
|
168 |
+
border-style: solid;
|
169 |
+
border-image-source: url('../../dependencies/assets/frameBorder.png');
|
170 |
+
border-image-slice: 200;
|
171 |
+
border-image-width: 47px;
|
172 |
+
border-image-outset: .4cm .3cm;
|
173 |
+
border-image-repeat: stretch;
|
174 |
+
}
|
175 |
+
|
176 |
+
.page code {
|
177 |
+
font-family: "Courier New", Courier, monospace;
|
178 |
+
white-space: pre-wrap;
|
179 |
+
overflow-wrap: break-word;
|
180 |
+
}
|
181 |
+
|
182 |
+
.page pre code {
|
183 |
+
width: 100%;
|
184 |
+
display: inline-block;
|
185 |
+
}
|
186 |
+
|
187 |
+
.page .columnSplit {
|
188 |
+
visibility: hidden;
|
189 |
+
-webkit-column-break-after: always;
|
190 |
+
break-after: always;
|
191 |
+
-moz-column-break-after: always;
|
192 |
+
margin-top: 0;
|
193 |
+
}
|
194 |
+
|
195 |
+
.page .columnSplit + * {
|
196 |
+
margin-top: 0;
|
197 |
+
}
|
198 |
+
|
199 |
+
.page blockquote,
|
200 |
+
.page table {
|
201 |
+
z-index: 15;
|
202 |
+
-webkit-column-break-inside: avoid;
|
203 |
+
page-break-inside: avoid;
|
204 |
+
break-inside: avoid;
|
205 |
+
}
|
206 |
+
|
207 |
+
|
208 |
+
.page ul ul,
|
209 |
+
.page ol ol,
|
210 |
+
.page ul ol,
|
211 |
+
.page ol ul {
|
212 |
+
margin-bottom: 0px;
|
213 |
+
margin-left: 1.5em;
|
214 |
+
}
|
215 |
+
|
216 |
+
.page li {
|
217 |
+
-webkit-column-break-inside: avoid;
|
218 |
+
page-break-inside: avoid;
|
219 |
+
break-inside: avoid;
|
220 |
+
}
|
221 |
+
|
222 |
+
.page .watermark {
|
223 |
+
display: grid !important;
|
224 |
+
place-items: center;
|
225 |
+
justify-content: center;
|
226 |
+
position: absolute;
|
227 |
+
margin: 0;
|
228 |
+
top: 0;
|
229 |
+
left: 0;
|
230 |
+
width: 100%;
|
231 |
+
height: 100%;
|
232 |
+
font-size: 120px;
|
233 |
+
text-transform: uppercase;
|
234 |
+
mix-blend-mode: overlay;
|
235 |
+
opacity: 30%;
|
236 |
+
transform: rotate(-45deg);
|
237 |
+
z-index: 500;
|
238 |
+
}
|
239 |
+
|
240 |
+
.page .watermark p {
|
241 |
+
margin-bottom: none;
|
242 |
+
}
|
243 |
+
|
244 |
+
.page [class*="watercolor"] {
|
245 |
+
position: absolute;
|
246 |
+
width: 2000px;
|
247 |
+
height: 2000px;
|
248 |
+
-webkit-mask-image: var(--wc);
|
249 |
+
-webkit-mask-size: contain;
|
250 |
+
-webkit-mask-repeat: no-repeat;
|
251 |
+
mask-image: var(--wc);
|
252 |
+
mask-size: contain;
|
253 |
+
mask-repeat: no-repeat;
|
254 |
+
background-size: cover;
|
255 |
+
background-color: var(--HB_Color_WatercolorStain);
|
256 |
+
--wc: url('/assets/watercolor/watercolor1.png');
|
257 |
+
z-index: -2;
|
258 |
+
}
|
259 |
+
|
260 |
+
.page .watercolor1 {
|
261 |
+
--wc: url('/assets/watercolor/watercolor1.png');
|
262 |
+
}
|
263 |
+
|
264 |
+
.page .watercolor2 {
|
265 |
+
--wc: url('/assets/watercolor/watercolor2.png');
|
266 |
+
}
|
267 |
+
|
268 |
+
.page .watercolor3 {
|
269 |
+
--wc: url('/assets/watercolor/watercolor3.png');
|
270 |
+
}
|
271 |
+
|
272 |
+
.page .watercolor4 {
|
273 |
+
--wc: url('/assets/watercolor/watercolor4.png');
|
274 |
+
}
|
275 |
+
|
276 |
+
.page .watercolor5 {
|
277 |
+
--wc: url('/assets/watercolor/watercolor5.png');
|
278 |
+
}
|
279 |
+
|
280 |
+
.page .watercolor6 {
|
281 |
+
--wc: url('/assets/watercolor/watercolor6.png');
|
282 |
+
}
|
283 |
+
|
284 |
+
.page .watercolor7 {
|
285 |
+
--wc: url('/assets/watercolor/watercolor7.png');
|
286 |
+
}
|
287 |
+
|
288 |
+
.page .watercolor8 {
|
289 |
+
--wc: url('/assets/watercolor/watercolor8.png');
|
290 |
+
}
|
291 |
+
|
292 |
+
.page .watercolor9 {
|
293 |
+
--wc: url('/assets/watercolor/watercolor9.png');
|
294 |
+
}
|
295 |
+
|
296 |
+
.page .watercolor10 {
|
297 |
+
--wc: url('/assets/watercolor/watercolor10.png');
|
298 |
+
}
|
299 |
+
|
300 |
+
.page .watercolor11 {
|
301 |
+
--wc: url('/assets/watercolor/watercolor11.png');
|
302 |
+
}
|
303 |
+
|
304 |
+
.page .watercolor12 {
|
305 |
+
--wc: url('/assets/watercolor/watercolor12.png');
|
306 |
+
}
|
307 |
+
|
308 |
+
.page [class*="imageMask"] {
|
309 |
+
position: absolute;
|
310 |
+
height: 200%;
|
311 |
+
width: 200%;
|
312 |
+
left: 50%;
|
313 |
+
bottom: 50%;
|
314 |
+
--rotation: 0;
|
315 |
+
--revealer: none;
|
316 |
+
--checkerboard: none;
|
317 |
+
--scaleX: 1;
|
318 |
+
--scaleY: 1;
|
319 |
+
-webkit-mask-image: var(--wc), var(--revealer);
|
320 |
+
-webkit-mask-repeat: repeat-x;
|
321 |
+
-webkit-mask-size: 50%;
|
322 |
+
-webkit-mask-position: 50% calc(50% - var(--offset));
|
323 |
+
mask-image: var(--wc);
|
324 |
+
mask-repeat: repeat-x;
|
325 |
+
mask-size: 50%;
|
326 |
+
mask-position: 50% calc(50% - var(--offset));
|
327 |
+
background-image: var(--checkerboard);
|
328 |
+
background-size: 20px;
|
329 |
+
z-index: -1;
|
330 |
+
transform: translateY(50%) translateX(-50%) rotate(calc(1deg * var(--rotation))) scaleX(var(--scaleX)) scaleY(var(--scaleY));
|
331 |
+
}
|
332 |
+
|
333 |
+
.page [class*="imageMask"] > p:has(img) {
|
334 |
+
position: absolute;
|
335 |
+
width: 50%;
|
336 |
+
height: 50%;
|
337 |
+
bottom: 50%;
|
338 |
+
left: 50%;
|
339 |
+
transform: translateX(-50%) translateY(50%) rotate(calc(-1deg * var(--rotation))) scaleX(calc(1 / var(--scaleX))) scaleY(calc(1 / var(--scaleY)));
|
340 |
+
}
|
341 |
+
|
342 |
+
.page [class*="imageMask"] img {
|
343 |
+
position: absolute;
|
344 |
+
display: block;
|
345 |
+
bottom: 0;
|
346 |
+
}
|
347 |
+
|
348 |
+
.page [class*="imageMask"].bottom {
|
349 |
+
--rotation: 0;
|
350 |
+
}
|
351 |
+
|
352 |
+
.page [class*="imageMask"].bottom img {
|
353 |
+
bottom: 0;
|
354 |
+
}
|
355 |
+
|
356 |
+
.page [class*="imageMask"].top {
|
357 |
+
--rotation: 180;
|
358 |
+
}
|
359 |
+
|
360 |
+
.page [class*="imageMask"].top img {
|
361 |
+
top: 0;
|
362 |
+
}
|
363 |
+
|
364 |
+
.page [class*="imageMask"].left {
|
365 |
+
--rotation: 90;
|
366 |
+
}
|
367 |
+
|
368 |
+
.page [class*="imageMask"].left img {
|
369 |
+
left: 0;
|
370 |
+
}
|
371 |
+
|
372 |
+
.page [class*="imageMask"].right {
|
373 |
+
--rotation: -90;
|
374 |
+
}
|
375 |
+
|
376 |
+
.page [class*="imageMask"].right img {
|
377 |
+
right: 0;
|
378 |
+
}
|
379 |
+
|
380 |
+
.page [class*="imageMask"].revealImage {
|
381 |
+
--revealer: linear-gradient(0deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2));
|
382 |
+
--checkerboard: url(/assets/waterColorMasks/missingImage.png);
|
383 |
+
}
|
384 |
+
|
385 |
+
.page .imageMaskEdge1 {
|
386 |
+
--wc: url(/assets/waterColorMasks/edge/0001.webp);
|
387 |
+
}
|
388 |
+
|
389 |
+
.page .imageMaskEdge2 {
|
390 |
+
--wc: url(/assets/waterColorMasks/edge/0002.webp);
|
391 |
+
}
|
392 |
+
|
393 |
+
.page .imageMaskEdge3 {
|
394 |
+
--wc: url(/assets/waterColorMasks/edge/0003.webp);
|
395 |
+
}
|
396 |
+
|
397 |
+
.page .imageMaskEdge4 {
|
398 |
+
--wc: url(/assets/waterColorMasks/edge/0004.webp);
|
399 |
+
}
|
400 |
+
|
401 |
+
.page .imageMaskEdge5 {
|
402 |
+
--wc: url(/assets/waterColorMasks/edge/0005.webp);
|
403 |
+
}
|
404 |
+
|
405 |
+
.page .imageMaskEdge6 {
|
406 |
+
--wc: url(/assets/waterColorMasks/edge/0006.webp);
|
407 |
+
}
|
408 |
+
|
409 |
+
.page .imageMaskEdge7 {
|
410 |
+
--wc: url(/assets/waterColorMasks/edge/0007.webp);
|
411 |
+
}
|
412 |
+
|
413 |
+
.page .imageMaskEdge8 {
|
414 |
+
--wc: url(/assets/waterColorMasks/edge/0008.webp);
|
415 |
+
}
|
416 |
+
|
417 |
+
.page .imageMaskEdge9 {
|
418 |
+
--wc: url(/assets/waterColorMasks/edge/0009.webp);
|
419 |
+
}
|
420 |
+
|
421 |
+
.page .imageMaskEdge10 {
|
422 |
+
--wc: url(/assets/waterColorMasks/edge/0010.webp);
|
423 |
+
}
|
424 |
+
|
425 |
+
.page .imageMaskEdge11 {
|
426 |
+
--wc: url(/assets/waterColorMasks/edge/0011.webp);
|
427 |
+
}
|
428 |
+
|
429 |
+
.page .imageMaskEdge12 {
|
430 |
+
--wc: url(/assets/waterColorMasks/edge/0012.webp);
|
431 |
+
}
|
432 |
+
|
433 |
+
.page .imageMaskCorner1 {
|
434 |
+
--wc: url(/assets/waterColorMasks/corner/0001.webp);
|
435 |
+
}
|
436 |
+
|
437 |
+
.page .imageMaskCorner2 {
|
438 |
+
--wc: url(/assets/waterColorMasks/corner/0002.webp);
|
439 |
+
}
|
440 |
+
|
441 |
+
.page .imageMaskCorner3 {
|
442 |
+
--wc: url(/assets/waterColorMasks/corner/0003.webp);
|
443 |
+
}
|
444 |
+
|
445 |
+
.page .imageMaskCorner4 {
|
446 |
+
--wc: url(/assets/waterColorMasks/corner/0004.webp);
|
447 |
+
}
|
448 |
+
|
449 |
+
.page .imageMaskCorner5 {
|
450 |
+
--wc: url(/assets/waterColorMasks/corner/0005.webp);
|
451 |
+
}
|
452 |
+
|
453 |
+
.page .imageMaskCorner6 {
|
454 |
+
--wc: url(/assets/waterColorMasks/corner/0006.webp);
|
455 |
+
}
|
456 |
+
|
457 |
+
.page .imageMaskCorner7 {
|
458 |
+
--wc: url(/assets/waterColorMasks/corner/0007.webp);
|
459 |
+
}
|
460 |
+
|
461 |
+
.page .imageMaskCorner8 {
|
462 |
+
--wc: url(/assets/waterColorMasks/corner/0008.webp);
|
463 |
+
}
|
464 |
+
|
465 |
+
.page .imageMaskCorner9 {
|
466 |
+
--wc: url(/assets/waterColorMasks/corner/0009.webp);
|
467 |
+
}
|
468 |
+
|
469 |
+
.page .imageMaskCorner10 {
|
470 |
+
--wc: url(/assets/waterColorMasks/corner/0010.webp);
|
471 |
+
}
|
472 |
+
|
473 |
+
.page .imageMaskCorner11 {
|
474 |
+
--wc: url(/assets/waterColorMasks/corner/0011.webp);
|
475 |
+
}
|
476 |
+
|
477 |
+
.page .imageMaskCorner12 {
|
478 |
+
--wc: url(/assets/waterColorMasks/corner/0012.webp);
|
479 |
+
}
|
480 |
+
|
481 |
+
.page .imageMaskCorner13 {
|
482 |
+
--wc: url(/assets/waterColorMasks/corner/0013.webp);
|
483 |
+
}
|
484 |
+
|
485 |
+
.page .imageMaskCorner14 {
|
486 |
+
--wc: url(/assets/waterColorMasks/corner/0014.webp);
|
487 |
+
}
|
488 |
+
|
489 |
+
.page .imageMaskCorner15 {
|
490 |
+
--wc: url(/assets/waterColorMasks/corner/0015.webp);
|
491 |
+
}
|
492 |
+
|
493 |
+
.page .imageMaskCorner16 {
|
494 |
+
--wc: url(/assets/waterColorMasks/corner/0016.webp);
|
495 |
+
}
|
496 |
+
|
497 |
+
.page .imageMaskCorner17 {
|
498 |
+
--wc: url(/assets/waterColorMasks/corner/0017.webp);
|
499 |
+
}
|
500 |
+
|
501 |
+
.page .imageMaskCorner18 {
|
502 |
+
--wc: url(/assets/waterColorMasks/corner/0018.webp);
|
503 |
+
}
|
504 |
+
|
505 |
+
.page .imageMaskCorner19 {
|
506 |
+
--wc: url(/assets/waterColorMasks/corner/0019.webp);
|
507 |
+
}
|
508 |
+
|
509 |
+
.page .imageMaskCorner20 {
|
510 |
+
--wc: url(/assets/waterColorMasks/corner/0020.webp);
|
511 |
+
}
|
512 |
+
|
513 |
+
.page .imageMaskCorner21 {
|
514 |
+
--wc: url(/assets/waterColorMasks/corner/0021.webp);
|
515 |
+
}
|
516 |
+
|
517 |
+
.page .imageMaskCorner22 {
|
518 |
+
--wc: url(/assets/waterColorMasks/corner/0022.webp);
|
519 |
+
}
|
520 |
+
|
521 |
+
.page .imageMaskCorner23 {
|
522 |
+
--wc: url(/assets/waterColorMasks/corner/0023.webp);
|
523 |
+
}
|
524 |
+
|
525 |
+
.page .imageMaskCorner24 {
|
526 |
+
--wc: url(/assets/waterColorMasks/corner/0024.webp);
|
527 |
+
}
|
528 |
+
|
529 |
+
.page .imageMaskCorner25 {
|
530 |
+
--wc: url(/assets/waterColorMasks/corner/0025.webp);
|
531 |
+
}
|
532 |
+
|
533 |
+
.page .imageMaskCorner26 {
|
534 |
+
--wc: url(/assets/waterColorMasks/corner/0026.webp);
|
535 |
+
}
|
536 |
+
|
537 |
+
.page .imageMaskCorner27 {
|
538 |
+
--wc: url(/assets/waterColorMasks/corner/0027.webp);
|
539 |
+
}
|
540 |
+
|
541 |
+
.page .imageMaskCorner28 {
|
542 |
+
--wc: url(/assets/waterColorMasks/corner/0028.webp);
|
543 |
+
}
|
544 |
+
|
545 |
+
.page .imageMaskCorner29 {
|
546 |
+
--wc: url(/assets/waterColorMasks/corner/0029.webp);
|
547 |
+
}
|
548 |
+
|
549 |
+
.page .imageMaskCorner30 {
|
550 |
+
--wc: url(/assets/waterColorMasks/corner/0030.webp);
|
551 |
+
}
|
552 |
+
|
553 |
+
.page .imageMaskCorner31 {
|
554 |
+
--wc: url(/assets/waterColorMasks/corner/0031.webp);
|
555 |
+
}
|
556 |
+
|
557 |
+
.page .imageMaskCorner32 {
|
558 |
+
--wc: url(/assets/waterColorMasks/corner/0032.webp);
|
559 |
+
}
|
560 |
+
|
561 |
+
.page .imageMaskCorner33 {
|
562 |
+
--wc: url(/assets/waterColorMasks/corner/0033.webp);
|
563 |
+
}
|
564 |
+
|
565 |
+
.page .imageMaskCorner34 {
|
566 |
+
--wc: url(/assets/waterColorMasks/corner/0034.webp);
|
567 |
+
}
|
568 |
+
|
569 |
+
.page .imageMaskCorner35 {
|
570 |
+
--wc: url(/assets/waterColorMasks/corner/0035.webp);
|
571 |
+
}
|
572 |
+
|
573 |
+
.page .imageMaskCorner36 {
|
574 |
+
--wc: url(/assets/waterColorMasks/corner/0036.webp);
|
575 |
+
}
|
576 |
+
|
577 |
+
.page .imageMaskCorner37 {
|
578 |
+
--wc: url(/assets/waterColorMasks/corner/0037.webp);
|
579 |
+
}
|
580 |
+
|
581 |
+
.page dl {
|
582 |
+
padding-left: 1em;
|
583 |
+
white-space: normal;
|
584 |
+
}
|
585 |
+
|
586 |
+
.page dt {
|
587 |
+
display: inline;
|
588 |
+
margin-right: 0.5ch;
|
589 |
+
margin-left: -1em;
|
590 |
+
}
|
591 |
+
|
592 |
+
.page dd {
|
593 |
+
display: inline;
|
594 |
+
margin-left: 0;
|
595 |
+
text-indent: 0;
|
596 |
+
}
|
597 |
+
|
598 |
+
.page .blank {
|
599 |
+
height: 1em;
|
600 |
+
margin-top: 0;
|
601 |
+
}
|
602 |
+
|
603 |
+
.page .blank + * {
|
604 |
+
margin-top: 0;
|
605 |
+
}
|
606 |
+
|
607 |
+
.page .wide {
|
608 |
+
column-span: all;
|
609 |
+
display: block;
|
610 |
+
margin-bottom: 1em;
|
611 |
+
}
|
612 |
+
|
613 |
+
.page .wide + * {
|
614 |
+
margin-top: 0;
|
615 |
+
}
|
dependencies/themes/Legacy/5ePHB/settings.json
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name" : "5e PHB",
|
3 |
+
"renderer" : "legacy",
|
4 |
+
"baseTheme" : false
|
5 |
+
}
|
dependencies/themes/Legacy/5ePHB/snippets.js
ADDED
@@ -0,0 +1,327 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* eslint-disable max-lines */
|
2 |
+
|
3 |
+
const MagicGen = require('./snippets/magic.gen.js');
|
4 |
+
const ClassTableGen = require('./snippets/classtable.gen.js');
|
5 |
+
const MonsterBlockGen = require('./snippets/monsterblock.gen.js');
|
6 |
+
const ClassFeatureGen = require('./snippets/classfeature.gen.js');
|
7 |
+
const CoverPageGen = require('./snippets/coverpage.gen.js');
|
8 |
+
const TableOfContentsGen = require('./snippets/tableOfContents.gen.js');
|
9 |
+
const dedent = require('dedent-tabs').default;
|
10 |
+
|
11 |
+
module.exports = [
|
12 |
+
|
13 |
+
{
|
14 |
+
groupName : 'Text Editor',
|
15 |
+
icon : 'fas fa-pencil-alt',
|
16 |
+
view : 'text',
|
17 |
+
snippets : [
|
18 |
+
{
|
19 |
+
name : 'Column Break',
|
20 |
+
icon : 'fas fa-columns',
|
21 |
+
gen : '```\n```\n\n'
|
22 |
+
},
|
23 |
+
{
|
24 |
+
name : 'New Page',
|
25 |
+
icon : 'fas fa-file-alt',
|
26 |
+
gen : '\\page\n\n'
|
27 |
+
},
|
28 |
+
{
|
29 |
+
name : 'Vertical Spacing',
|
30 |
+
icon : 'fas fa-arrows-alt-v',
|
31 |
+
gen : '<div style=\'margin-top:140px\'></div>\n\n'
|
32 |
+
},
|
33 |
+
{
|
34 |
+
name : 'Wide Block',
|
35 |
+
icon : 'fas fa-arrows-alt-h',
|
36 |
+
gen : '<div class=\'wide\'>\nEverything in here will be extra wide. Tables, text, everything! Beware though, CSS columns can behave a bit weird sometimes.\n</div>\n'
|
37 |
+
},
|
38 |
+
{
|
39 |
+
name : 'Image',
|
40 |
+
icon : 'fas fa-image',
|
41 |
+
gen : [
|
42 |
+
'<img ',
|
43 |
+
' src=\'https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg\' ',
|
44 |
+
' style=\'width:325px\' />',
|
45 |
+
'Credit: Kyounghwan Kim'
|
46 |
+
].join('\n')
|
47 |
+
},
|
48 |
+
{
|
49 |
+
name : 'Background Image',
|
50 |
+
icon : 'fas fa-tree',
|
51 |
+
gen : [
|
52 |
+
'<img ',
|
53 |
+
' src=\'http://i.imgur.com/hMna6G0.png\' ',
|
54 |
+
' style=\'position:absolute; top:50px; right:30px; width:280px\' />'
|
55 |
+
].join('\n')
|
56 |
+
},
|
57 |
+
|
58 |
+
{
|
59 |
+
name : 'Page Number',
|
60 |
+
icon : 'fas fa-bookmark',
|
61 |
+
gen : '<div class=\'pageNumber\'>1</div>\n<div class=\'footnote\'>PART 1 | FANCINESS</div>\n\n'
|
62 |
+
},
|
63 |
+
|
64 |
+
{
|
65 |
+
name : 'Auto-incrementing Page Number',
|
66 |
+
icon : 'fas fa-sort-numeric-down',
|
67 |
+
gen : '<div class=\'pageNumber auto\'></div>\n'
|
68 |
+
},
|
69 |
+
|
70 |
+
{
|
71 |
+
name : 'Link to page',
|
72 |
+
icon : 'fas fa-link',
|
73 |
+
gen : '[Click here](#p3) to go to page 3\n'
|
74 |
+
},
|
75 |
+
|
76 |
+
{
|
77 |
+
name : 'Table of Contents',
|
78 |
+
icon : 'fas fa-book',
|
79 |
+
gen : TableOfContentsGen
|
80 |
+
},
|
81 |
+
{
|
82 |
+
name : 'Add Comment',
|
83 |
+
icon : 'fas fa-code',
|
84 |
+
gen : '<!-- This is a comment that will not be rendered into your brew. Hotkey (Ctrl/Cmd + /). -->'
|
85 |
+
}
|
86 |
+
]
|
87 |
+
},
|
88 |
+
|
89 |
+
|
90 |
+
{
|
91 |
+
groupName : 'Style Editor',
|
92 |
+
icon : 'fas fa-pencil-alt',
|
93 |
+
view : 'style',
|
94 |
+
snippets : [
|
95 |
+
{
|
96 |
+
name : 'Remove Drop Cap',
|
97 |
+
icon : 'fas fa-remove-format',
|
98 |
+
gen : dedent`/* Removes Drop Caps */
|
99 |
+
.phb h1+p:first-letter {
|
100 |
+
all: unset;
|
101 |
+
}\n\n`
|
102 |
+
},
|
103 |
+
{
|
104 |
+
name : 'Tweak Drop Cap',
|
105 |
+
icon : 'fas fa-sliders-h',
|
106 |
+
gen : dedent`/* Drop Cap Settings */
|
107 |
+
.phb h1 + p::first-letter {
|
108 |
+
float: left;
|
109 |
+
font-family: Solberry;
|
110 |
+
font-size: 10em;
|
111 |
+
color: #222;
|
112 |
+
line-height: .8em;
|
113 |
+
}\n\n`
|
114 |
+
},
|
115 |
+
{
|
116 |
+
name : 'Add Comment',
|
117 |
+
icon : 'fas fa-code',
|
118 |
+
gen : '/* This is a comment that will not be rendered into your brew. */'
|
119 |
+
}
|
120 |
+
]
|
121 |
+
},
|
122 |
+
|
123 |
+
|
124 |
+
/************************* PHB ********************/
|
125 |
+
|
126 |
+
{
|
127 |
+
groupName : 'PHB',
|
128 |
+
icon : 'fas fa-book',
|
129 |
+
view : 'text',
|
130 |
+
snippets : [
|
131 |
+
{
|
132 |
+
name : 'Spell',
|
133 |
+
icon : 'fas fa-magic',
|
134 |
+
gen : MagicGen.spell,
|
135 |
+
},
|
136 |
+
{
|
137 |
+
name : 'Spell List',
|
138 |
+
icon : 'fas fa-list',
|
139 |
+
gen : MagicGen.spellList,
|
140 |
+
},
|
141 |
+
{
|
142 |
+
name : 'Class Feature',
|
143 |
+
icon : 'fas fa-trophy',
|
144 |
+
gen : ClassFeatureGen,
|
145 |
+
},
|
146 |
+
{
|
147 |
+
name : 'Note',
|
148 |
+
icon : 'fas fa-sticky-note',
|
149 |
+
gen : function(){
|
150 |
+
return [
|
151 |
+
'> ##### Time to Drop Knowledge',
|
152 |
+
'> Use notes to point out some interesting information. ',
|
153 |
+
'> ',
|
154 |
+
'> **Tables and lists** both work within a note.'
|
155 |
+
].join('\n');
|
156 |
+
},
|
157 |
+
},
|
158 |
+
{
|
159 |
+
name : 'Descriptive Text Box',
|
160 |
+
icon : 'far fa-sticky-note',
|
161 |
+
gen : function(){
|
162 |
+
return [
|
163 |
+
'<div class=\'descriptive\'>',
|
164 |
+
'##### Time to Drop Knowledge',
|
165 |
+
'Use notes to point out some interesting information. ',
|
166 |
+
'',
|
167 |
+
'**Tables and lists** both work within a note.',
|
168 |
+
'</div>'
|
169 |
+
].join('\n');
|
170 |
+
},
|
171 |
+
},
|
172 |
+
{
|
173 |
+
name : 'Monster Stat Block',
|
174 |
+
icon : 'fas fa-bug',
|
175 |
+
gen : MonsterBlockGen.half,
|
176 |
+
},
|
177 |
+
{
|
178 |
+
name : 'Wide Monster Stat Block',
|
179 |
+
icon : 'fas fa-paw',
|
180 |
+
gen : MonsterBlockGen.full,
|
181 |
+
},
|
182 |
+
{
|
183 |
+
name : 'Cover Page',
|
184 |
+
icon : 'far fa-file-word',
|
185 |
+
gen : CoverPageGen,
|
186 |
+
},
|
187 |
+
{
|
188 |
+
name : 'Artist Credit',
|
189 |
+
icon : 'fas fa-signature',
|
190 |
+
gen : '<div class=\'artist\' style=\'top:90px;right:30px;\'>\n' +
|
191 |
+
'##### Starry Night\n' +
|
192 |
+
'[Van Gogh](https://www.vangoghmuseum.nl/en)\n' +
|
193 |
+
'</div>\n'
|
194 |
+
},
|
195 |
+
]
|
196 |
+
},
|
197 |
+
|
198 |
+
|
199 |
+
|
200 |
+
/********************* TABLES *********************/
|
201 |
+
|
202 |
+
{
|
203 |
+
groupName : 'Tables',
|
204 |
+
icon : 'fas fa-table',
|
205 |
+
view : 'text',
|
206 |
+
snippets : [
|
207 |
+
{
|
208 |
+
name : 'Class Table',
|
209 |
+
icon : 'fas fa-table',
|
210 |
+
gen : ClassTableGen.full,
|
211 |
+
},
|
212 |
+
{
|
213 |
+
name : 'Half Class Table',
|
214 |
+
icon : 'fas fa-list-alt',
|
215 |
+
gen : ClassTableGen.half,
|
216 |
+
},
|
217 |
+
{
|
218 |
+
name : 'Table',
|
219 |
+
icon : 'fas fa-th-list',
|
220 |
+
gen : function(){
|
221 |
+
return [
|
222 |
+
'##### Cookie Tastiness',
|
223 |
+
'| Tastiness | Cookie Type |',
|
224 |
+
'|:----:|:-------------|',
|
225 |
+
'| -5 | Raisin |',
|
226 |
+
'| 8th | Chocolate Chip |',
|
227 |
+
'| 11th | 2 or lower |',
|
228 |
+
'| 14th | 3 or lower |',
|
229 |
+
'| 17th | 4 or lower |\n\n',
|
230 |
+
].join('\n');
|
231 |
+
},
|
232 |
+
},
|
233 |
+
{
|
234 |
+
name : 'Wide Table',
|
235 |
+
icon : 'fas fa-list',
|
236 |
+
gen : function(){
|
237 |
+
return [
|
238 |
+
'<div class=\'wide\'>',
|
239 |
+
'##### Cookie Tastiness',
|
240 |
+
'| Tastiness | Cookie Type |',
|
241 |
+
'|:----:|:-------------|',
|
242 |
+
'| -5 | Raisin |',
|
243 |
+
'| 8th | Chocolate Chip |',
|
244 |
+
'| 11th | 2 or lower |',
|
245 |
+
'| 14th | 3 or lower |',
|
246 |
+
'| 17th | 4 or lower |',
|
247 |
+
'</div>\n\n'
|
248 |
+
].join('\n');
|
249 |
+
},
|
250 |
+
},
|
251 |
+
{
|
252 |
+
name : 'Split Table',
|
253 |
+
icon : 'fas fa-th-large',
|
254 |
+
gen : dedent`\n
|
255 |
+
<div style='column-count:2'>
|
256 |
+
| d10 | Damage Type |
|
257 |
+
|:---:|:------------|
|
258 |
+
| 1 | Acid |
|
259 |
+
| 2 | Cold |
|
260 |
+
| 3 | Fire |
|
261 |
+
| 4 | Force |
|
262 |
+
| 5 | Lightning |
|
263 |
+
|
264 |
+
| d10 | Damage Type |
|
265 |
+
|:---:|:------------|
|
266 |
+
| 6 | Necrotic |
|
267 |
+
| 7 | Poison |
|
268 |
+
| 8 | Psychic |
|
269 |
+
| 9 | Radiant |
|
270 |
+
| 10 | Thunder |
|
271 |
+
</div>
|
272 |
+
\n`
|
273 |
+
}
|
274 |
+
]
|
275 |
+
},
|
276 |
+
|
277 |
+
|
278 |
+
|
279 |
+
|
280 |
+
/**************** PRINT *************/
|
281 |
+
|
282 |
+
{
|
283 |
+
groupName : 'Print',
|
284 |
+
icon : 'fas fa-print',
|
285 |
+
view : 'style',
|
286 |
+
snippets : [
|
287 |
+
{
|
288 |
+
name : 'A4 Page Size',
|
289 |
+
icon : 'far fa-file',
|
290 |
+
gen : ['/* A4 Page Size */',
|
291 |
+
'.phb {',
|
292 |
+
' width : 210mm;',
|
293 |
+
' height : 296.8mm;',
|
294 |
+
'}'
|
295 |
+
].join('\n')
|
296 |
+
},
|
297 |
+
{
|
298 |
+
name : 'Square Page Size',
|
299 |
+
icon : 'far fa-file',
|
300 |
+
gen : ['/* Square Page Size */',
|
301 |
+
'.phb {',
|
302 |
+
' width : 125mm;',
|
303 |
+
' height : 125mm;',
|
304 |
+
' padding : 12.5mm;',
|
305 |
+
' columns : unset;',
|
306 |
+
'}',
|
307 |
+
''
|
308 |
+
].join('\n')
|
309 |
+
},
|
310 |
+
{
|
311 |
+
name : 'Ink Friendly',
|
312 |
+
icon : 'fas fa-tint',
|
313 |
+
gen : dedent`
|
314 |
+
/* Ink Friendly */
|
315 |
+
.phb, .phb blockquote, .phb hr+blockquote {
|
316 |
+
background : white;
|
317 |
+
box-shadow : 0px 0px 3px;
|
318 |
+
}
|
319 |
+
|
320 |
+
.phb img {
|
321 |
+
visibility : hidden;
|
322 |
+
}`
|
323 |
+
},
|
324 |
+
]
|
325 |
+
},
|
326 |
+
|
327 |
+
];
|
dependencies/themes/Legacy/5ePHB/snippets/classfeature.gen.js
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
module.exports = function(classname){
|
4 |
+
|
5 |
+
classname = _.sample(['archivist', 'fancyman', 'linguist', 'fletcher',
|
6 |
+
'notary', 'berserker-typist', 'fishmongerer', 'manicurist', 'haberdasher', 'concierge']);
|
7 |
+
|
8 |
+
classname = classname.toLowerCase();
|
9 |
+
|
10 |
+
const hitDie = _.sample([4, 6, 8, 10, 12]);
|
11 |
+
const spellSkill = _.sample(['Wisdom', 'Charisma', 'Intelligence']);
|
12 |
+
|
13 |
+
const abilityList = ['Strength', 'Dexerity', 'Constitution', 'Wisdom', 'Charisma', 'Intelligence'];
|
14 |
+
const skillList = ['Acrobatics ', 'Animal Handling', 'Arcana', 'Athletics', 'Deception', 'History', 'Insight', 'Intimidation', 'Investigation', 'Medicine', 'Nature', 'Perception', 'Performance', 'Persuasion', 'Religion', 'Sleight of Hand', 'Stealth', 'Survival'];
|
15 |
+
|
16 |
+
|
17 |
+
return [
|
18 |
+
'## Class Features',
|
19 |
+
`As a ${classname}, you gain the following class features`,
|
20 |
+
'#### Hit Points',
|
21 |
+
'___',
|
22 |
+
`- **Hit Dice:** 1d${hitDie} per ${classname} level`,
|
23 |
+
`- **Hit Points at 1st Level:** ${hitDie} + your Constitution modifier`,
|
24 |
+
`- **Hit Points at Higher Levels:** 1d${hitDie} (or ${hitDie/2 + 1}) + your Constitution modifier per ${classname} level after 1st`,
|
25 |
+
'',
|
26 |
+
'#### Proficiencies',
|
27 |
+
'___',
|
28 |
+
`- **Armor:** ${_.sampleSize(['Light armor', 'Medium armor', 'Heavy armor', 'Shields'], _.random(0, 3)).join(', ') || 'None'}`,
|
29 |
+
`- **Weapons:** ${_.sampleSize(['Squeegee', 'Rubber Chicken', 'Simple weapons', 'Martial weapons'], _.random(0, 2)).join(', ') || 'None'}`,
|
30 |
+
`- **Tools:** ${_.sampleSize(['Artisan\'s tools', 'one musical instrument', 'Thieves\' tools'], _.random(0, 2)).join(', ') || 'None'}`,
|
31 |
+
'',
|
32 |
+
'___',
|
33 |
+
`- **Saving Throws:** ${_.sampleSize(abilityList, 2).join(', ')}`,
|
34 |
+
`- **Skills:** Choose two from ${_.sampleSize(skillList, _.random(4, 6)).join(', ')}`,
|
35 |
+
'',
|
36 |
+
'#### Spellcasting Ability',
|
37 |
+
'',
|
38 |
+
`<div style=text-align:center>`,
|
39 |
+
'___',
|
40 |
+
`- **Spell save DC** = ${_.sample([6, 8, 10])} + your proficiency bonus + your ${spellSkill} modifier`,
|
41 |
+
'',
|
42 |
+
`- **Spell attack modifier** = your proficiency bonus + your ${spellSkill} modifier`,
|
43 |
+
`</div>`,
|
44 |
+
'',
|
45 |
+
'#### Equipment',
|
46 |
+
'You start with the following equipment, in addition to the equipment granted by your background:',
|
47 |
+
'- *(a)* a martial weapon and a shield or *(b)* two martial weapons',
|
48 |
+
'- *(a)* five javelins or *(b)* any simple melee weapon',
|
49 |
+
`- ${_.sample(['10 lint fluffs', '1 button', 'a cherished lost sock'])}`,
|
50 |
+
'\n\n\n'
|
51 |
+
].join('\n');
|
52 |
+
};
|
dependencies/themes/Legacy/5ePHB/snippets/classtable.gen.js
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const features = [
|
4 |
+
'Astrological Botany',
|
5 |
+
'Astrological Chemistry',
|
6 |
+
'Biochemical Sorcery',
|
7 |
+
'Civil Alchemy',
|
8 |
+
'Consecrated Biochemistry',
|
9 |
+
'Demonic Anthropology',
|
10 |
+
'Divinatory Mineralogy',
|
11 |
+
'Genetic Banishing',
|
12 |
+
'Hermetic Geography',
|
13 |
+
'Immunological Incantations',
|
14 |
+
'Nuclear Illusionism',
|
15 |
+
'Ritual Astronomy',
|
16 |
+
'Seismological Divination',
|
17 |
+
'Spiritual Biochemistry',
|
18 |
+
'Statistical Occultism',
|
19 |
+
'Police Necromancer',
|
20 |
+
'Sixgun Poisoner',
|
21 |
+
'Pharmaceutical Gunslinger',
|
22 |
+
'Infernal Banker',
|
23 |
+
'Spell Analyst',
|
24 |
+
'Gunslinger Corruptor',
|
25 |
+
'Torque Interfacer',
|
26 |
+
'Exo Interfacer',
|
27 |
+
'Gunpowder Torturer',
|
28 |
+
'Orbital Gravedigger',
|
29 |
+
'Phased Linguist',
|
30 |
+
'Mathematical Pharmacist',
|
31 |
+
'Plasma Outlaw',
|
32 |
+
'Malefic Chemist',
|
33 |
+
'Police Cultist'
|
34 |
+
];
|
35 |
+
|
36 |
+
const classnames = ['Archivist', 'Fancyman', 'Linguist', 'Fletcher',
|
37 |
+
'Notary', 'Berserker-Typist', 'Fishmongerer', 'Manicurist', 'Haberdasher', 'Concierge'];
|
38 |
+
|
39 |
+
const levels = ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '10th', '11th', '12th', '13th', '14th', '15th', '16th', '17th', '18th', '19th', '20th'];
|
40 |
+
|
41 |
+
const profBonus = [2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6];
|
42 |
+
|
43 |
+
const getFeature = (level)=>{
|
44 |
+
let res = [];
|
45 |
+
if(_.includes([4, 6, 8, 12, 14, 16, 19], level+1)){
|
46 |
+
res = ['Ability Score Improvement'];
|
47 |
+
}
|
48 |
+
res = _.union(res, _.sampleSize(features, _.sample([0, 1, 1, 1, 1, 1])));
|
49 |
+
if(!res.length) return '─';
|
50 |
+
return res.join(', ');
|
51 |
+
};
|
52 |
+
|
53 |
+
module.exports = {
|
54 |
+
full : function(){
|
55 |
+
const classname = _.sample(classnames);
|
56 |
+
|
57 |
+
const maxes = [4, 3, 3, 3, 3, 2, 2, 1, 1];
|
58 |
+
const drawSlots = function(Slots){
|
59 |
+
let slots = Number(Slots);
|
60 |
+
return _.times(9, function(i){
|
61 |
+
const max = maxes[i];
|
62 |
+
if(slots < 1) return '—';
|
63 |
+
const res = _.min([max, slots]);
|
64 |
+
slots -= res;
|
65 |
+
return res;
|
66 |
+
}).join(' | ');
|
67 |
+
};
|
68 |
+
|
69 |
+
|
70 |
+
let cantrips = 3;
|
71 |
+
let spells = 1;
|
72 |
+
let slots = 2;
|
73 |
+
return `<div class='classTable wide'>\n##### The ${classname}\n` +
|
74 |
+
`| Level | Proficiency Bonus | Features | Cantrips Known | Spells Known | 1st | 2nd | 3rd | 4th | 5th | 6th | 7th | 8th | 9th |\n`+
|
75 |
+
`|:---:|:---:|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n${
|
76 |
+
_.map(levels, function(levelName, level){
|
77 |
+
const res = [
|
78 |
+
levelName,
|
79 |
+
`+${profBonus[level]}`,
|
80 |
+
getFeature(level),
|
81 |
+
cantrips,
|
82 |
+
spells,
|
83 |
+
drawSlots(slots)
|
84 |
+
].join(' | ');
|
85 |
+
|
86 |
+
cantrips += _.random(0, 1);
|
87 |
+
spells += _.random(0, 1);
|
88 |
+
slots += _.random(0, 2);
|
89 |
+
|
90 |
+
return `| ${res} |`;
|
91 |
+
}).join('\n')}\n</div>\n\n`;
|
92 |
+
},
|
93 |
+
|
94 |
+
half : function(){
|
95 |
+
const classname = _.sample(classnames);
|
96 |
+
|
97 |
+
let featureScore = 1;
|
98 |
+
return `<div class='classTable'>\n##### The ${classname}\n` +
|
99 |
+
`| Level | Proficiency Bonus | Features | ${_.sample(features)}|\n` +
|
100 |
+
`|:---:|:---:|:---|:---:|\n${
|
101 |
+
_.map(levels, function(levelName, level){
|
102 |
+
const res = [
|
103 |
+
levelName,
|
104 |
+
`+${profBonus[level]}`,
|
105 |
+
getFeature(level),
|
106 |
+
`+${featureScore}`
|
107 |
+
].join(' | ');
|
108 |
+
|
109 |
+
featureScore += _.random(0, 1);
|
110 |
+
|
111 |
+
return `| ${res} |`;
|
112 |
+
}).join('\n')}\n</div>\n\n`;
|
113 |
+
}
|
114 |
+
};
|
dependencies/themes/Legacy/5ePHB/snippets/coverpage.gen.js
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const titles = [
|
4 |
+
'The Burning Gallows',
|
5 |
+
'The Ring of Nenlast',
|
6 |
+
'Below the Blind Tavern',
|
7 |
+
'Below the Hungering River',
|
8 |
+
'Before Bahamut\'s Land',
|
9 |
+
'The Cruel Grave from Within',
|
10 |
+
'The Strength of Trade Road',
|
11 |
+
'Through The Raven Queen\'s Worlds',
|
12 |
+
'Within the Settlement',
|
13 |
+
'The Crown from Within',
|
14 |
+
'The Merchant Within the Battlefield',
|
15 |
+
'Ioun\'s Fading Traveler',
|
16 |
+
'The Legion Ingredient',
|
17 |
+
'The Explorer Lure',
|
18 |
+
'Before the Charming Badlands',
|
19 |
+
'The Living Dead Above the Fearful Cage',
|
20 |
+
'Vecna\'s Hidden Sage',
|
21 |
+
'Bahamut\'s Demonspawn',
|
22 |
+
'Across Gruumsh\'s Elemental Chaos',
|
23 |
+
'The Blade of Orcus',
|
24 |
+
'Beyond Revenge',
|
25 |
+
'Brain of Insanity',
|
26 |
+
'Breed Battle!, A New Beginning',
|
27 |
+
'Evil Lake, A New Beginning',
|
28 |
+
'Invasion of the Gigantic Cat, Part II',
|
29 |
+
'Kraken War 2020',
|
30 |
+
'The Body Whisperers',
|
31 |
+
'The Diabolical Tales of the Ape-Women',
|
32 |
+
'The Doctor Immortal',
|
33 |
+
'The Doctor from Heaven',
|
34 |
+
'The Graveyard',
|
35 |
+
'Azure Core',
|
36 |
+
'Core Battle',
|
37 |
+
'Core of Heaven: The Guardian of Amazement',
|
38 |
+
'Deadly Amazement III',
|
39 |
+
'Dry Chaos IX',
|
40 |
+
'Gate Thunder',
|
41 |
+
'Guardian: Skies of the Dark Wizard',
|
42 |
+
'Lute of Eternity',
|
43 |
+
'Mercury\'s Planet: Brave Evolution',
|
44 |
+
'Ruby of Atlantis: The Quake of Peace',
|
45 |
+
'Sky of Zelda: The Thunder of Force',
|
46 |
+
'Vyse\'s Skies',
|
47 |
+
'White Greatness III',
|
48 |
+
'Yellow Divinity',
|
49 |
+
'Zidane\'s Ghost'
|
50 |
+
];
|
51 |
+
|
52 |
+
const subtitles = [
|
53 |
+
'In an ominous universe, a botanist opposes terrorism.',
|
54 |
+
'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.',
|
55 |
+
'In a land of corruption, two cyberneticists and a dungeon delver search for freedom.',
|
56 |
+
'In an evil empire of horror, two rangers battle the forces of hell.',
|
57 |
+
'In a lost city, in an age of sorcery, a librarian quests for revenge.',
|
58 |
+
'In a universe of illusions and danger, three time travellers and an adventurer search for justice.',
|
59 |
+
'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.',
|
60 |
+
'In a universe of demons, in an era of insanity and ghosts, three bodyguards and a bodyguard try to find vengance.',
|
61 |
+
'In a kingdom of corruption and battle, seven artificial intelligences try to save the last living fertile woman.',
|
62 |
+
'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.',
|
63 |
+
'In a crime-infested kingdom, three martial artists quest for the truth and oppose evil.',
|
64 |
+
'In a terrifying universe of lost souls, in an era of lost souls, eight dancers fight evil.',
|
65 |
+
'In a galaxy of confusion and insanity, three martial artists and a duke battle a mob of psychics.',
|
66 |
+
'In an amazing kingdom, a wizard and a secretary hope to prevent the destruction of mankind.',
|
67 |
+
'In a kingdom of deception, a reporter searches for fame.',
|
68 |
+
'In a hellish empire, a swordswoman and a duke try to find the ultimate weapon and battle a conspiracy.',
|
69 |
+
'In an evil galaxy of illusion, in a time of technology and misery, seven psychiatrists battle crime.',
|
70 |
+
'In a dark city of confusion, three swordswomen and a singer battle lawlessness.',
|
71 |
+
'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.',
|
72 |
+
'In a kingdom of panic, six adventurers oppose lawlessness.',
|
73 |
+
'In a land of dreams and hopelessness, three hackers and a cyborg search for justice.',
|
74 |
+
'On a planet of mysticism, three travelers and a fire fighter quest for the ultimate weapon and oppose evil.',
|
75 |
+
'In a wicked universe, five seers fight lawlessness.',
|
76 |
+
'In a kingdom of death, in an era of illusion and blood, four colonists search for fame.',
|
77 |
+
'In an amazing kingdom, in an age of sorcery and lost souls, eight space pirates quest for freedom.',
|
78 |
+
'In a cursed empire, five inventors oppose terrorism.',
|
79 |
+
'On a crime-ridden planet of conspiracy, a watchman and an artificial intelligence try to find love and oppose lawlessness.',
|
80 |
+
'In a forgotten land, a reporter and a spy try to stop the apocalypse.',
|
81 |
+
'In a forbidden land of prophecy, a scientist and an archivist oppose a cabal of barbarians intent on stealing the souls of the innocent.',
|
82 |
+
'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.',
|
83 |
+
'In a galaxy of dark magic, four fighters seek freedom.',
|
84 |
+
'In an empire of deception, six tomb-robbers quest for the ultimate weapon and combat an army of raiders.',
|
85 |
+
'In a kingdom of corruption and lost souls, in an age of panic, eight planetologists oppose evil.',
|
86 |
+
'In a galaxy of misery and hopelessness, in a time of agony and pain, five planetologists search for vengance.',
|
87 |
+
'In a universe of technology and insanity, in a time of sorcery, a computer techician quests for hope.',
|
88 |
+
'On a planet of dark magic and barbarism, in an age of horror and blasphemy, seven librarians search for fame.',
|
89 |
+
'In an empire of dark magic, in a time of blood and illusions, four monks try to find the ultimate weapon and combat terrorism.',
|
90 |
+
'In a forgotten empire of dark magic, six kings try to prevent the destruction of mankind.',
|
91 |
+
'In a galaxy of dark magic and horror, in an age of hopelessness, four marines and an outlaw combat evil.',
|
92 |
+
'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.',
|
93 |
+
'In a damned kingdom of technology, a virtual reality programmer and a fighter seek fame.',
|
94 |
+
'In a hellish kingdom, in an age of blasphemy and blasphemy, an astrologer searches for fame.',
|
95 |
+
'In a damned world of devils, an alien and a ranger quest for love and oppose a syndicate of demons.',
|
96 |
+
'In a cursed galaxy, in a time of pain, seven librarians hope to avert the apocalypse.',
|
97 |
+
'In a crime-infested galaxy, in an era of hopelessness and panic, three champions and a grave robber try to solve the ultimate crime.'
|
98 |
+
];
|
99 |
+
|
100 |
+
|
101 |
+
module.exports = ()=>{
|
102 |
+
return `<style>
|
103 |
+
.phb#p1{ text-align:center; }
|
104 |
+
.phb#p1:after{ display:none; }
|
105 |
+
</style>
|
106 |
+
|
107 |
+
<div style='margin-top:450px;'></div>
|
108 |
+
|
109 |
+
# ${_.sample(titles)}
|
110 |
+
|
111 |
+
<div style='margin-top:25px'></div>
|
112 |
+
<div class='wide'>
|
113 |
+
##### ${_.sample(subtitles)}
|
114 |
+
</div>
|
115 |
+
|
116 |
+
\\page`;
|
117 |
+
};
|
dependencies/themes/Legacy/5ePHB/snippets/fullclass.gen.js
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const ClassFeatureGen = require('./classfeature.gen.js');
|
4 |
+
|
5 |
+
const ClassTableGen = require('./classtable.gen.js');
|
6 |
+
|
7 |
+
module.exports = function(){
|
8 |
+
|
9 |
+
const classname = _.sample(['Archivist', 'Fancyman', 'Linguist', 'Fletcher',
|
10 |
+
'Notary', 'Berserker-Typist', 'Fishmongerer', 'Manicurist', 'Haberdasher', 'Concierge']);
|
11 |
+
|
12 |
+
|
13 |
+
const image = _.sample(_.map([
|
14 |
+
'http://orig01.deviantart.net/4682/f/2007/099/f/c/bard_stick_figure_by_wrpigeek.png',
|
15 |
+
'http://img07.deviantart.net/a3c9/i/2007/099/3/a/archer_stick_figure_by_wrpigeek.png',
|
16 |
+
'http://pre04.deviantart.net/d596/th/pre/f/2007/099/5/2/adventurer_stick_figure_by_wrpigeek.png',
|
17 |
+
'http://img13.deviantart.net/d501/i/2007/099/d/4/black_mage_stick_figure_by_wrpigeek.png',
|
18 |
+
'http://img09.deviantart.net/5cf3/i/2007/099/d/d/dark_knight_stick_figure_by_wrpigeek.png',
|
19 |
+
'http://pre01.deviantart.net/7a34/th/pre/f/2007/099/6/3/monk_stick_figure_by_wrpigeek.png',
|
20 |
+
'http://img11.deviantart.net/5dcc/i/2007/099/d/1/mystic_knight_stick_figure_by_wrpigeek.png',
|
21 |
+
'http://pre08.deviantart.net/ad45/th/pre/f/2007/099/a/0/thief_stick_figure_by_wrpigeek.png',
|
22 |
+
], function(url){
|
23 |
+
return `<img src = '${url}' style='max-width:8cm;max-height:25cm' />`;
|
24 |
+
}));
|
25 |
+
|
26 |
+
|
27 |
+
return `${[
|
28 |
+
image,
|
29 |
+
'',
|
30 |
+
'```',
|
31 |
+
'```',
|
32 |
+
'<div style=\'margin-top:240px\'></div>\n\n',
|
33 |
+
`## ${classname}`,
|
34 |
+
'Cool intro stuff will go here',
|
35 |
+
|
36 |
+
'\\page',
|
37 |
+
ClassTableGen(classname),
|
38 |
+
ClassFeatureGen(classname),
|
39 |
+
|
40 |
+
|
41 |
+
|
42 |
+
].join('\n')}\n\n\n`;
|
43 |
+
};
|
dependencies/themes/Legacy/5ePHB/snippets/magic.gen.js
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const spellNames = [
|
4 |
+
'Astral Rite of Acne',
|
5 |
+
'Create Acne',
|
6 |
+
'Cursed Ramen Erruption',
|
7 |
+
'Dark Chant of the Dentists',
|
8 |
+
'Erruption of Immaturity',
|
9 |
+
'Flaming Disc of Inconvenience',
|
10 |
+
'Heal Bad Hygene',
|
11 |
+
'Heavenly Transfiguration of the Cream Devil',
|
12 |
+
'Hellish Cage of Mucus',
|
13 |
+
'Irritate Peanut Butter Fairy',
|
14 |
+
'Luminous Erruption of Tea',
|
15 |
+
'Mystic Spell of the Poser',
|
16 |
+
'Sorcerous Enchantment of the Chimneysweep',
|
17 |
+
'Steak Sauce Ray',
|
18 |
+
'Talk to Groupie',
|
19 |
+
'Astonishing Chant of Chocolate',
|
20 |
+
'Astounding Pasta Puddle',
|
21 |
+
'Ball of Annoyance',
|
22 |
+
'Cage of Yarn',
|
23 |
+
'Control Noodles Elemental',
|
24 |
+
'Create Nervousness',
|
25 |
+
'Cure Baldness',
|
26 |
+
'Cursed Ritual of Bad Hair',
|
27 |
+
'Dispell Piles in Dentist',
|
28 |
+
'Eliminate Florists',
|
29 |
+
'Illusionary Transfiguration of the Babysitter',
|
30 |
+
'Necromantic Armor of Salad Dressing',
|
31 |
+
'Occult Transfiguration of Foot Fetish',
|
32 |
+
'Protection from Mucus Giant',
|
33 |
+
'Tinsel Blast',
|
34 |
+
'Alchemical Evocation of the Goths',
|
35 |
+
'Call Fangirl',
|
36 |
+
'Divine Spell of Crossdressing',
|
37 |
+
'Dominate Ramen Giant',
|
38 |
+
'Eliminate Vindictiveness in Gym Teacher',
|
39 |
+
'Extra-Planar Spell of Irritation',
|
40 |
+
'Induce Whining in Babysitter',
|
41 |
+
'Invoke Complaining',
|
42 |
+
'Magical Enchantment of Arrogance',
|
43 |
+
'Occult Globe of Salad Dressing',
|
44 |
+
'Overwhelming Enchantment of the Chocolate Fairy',
|
45 |
+
'Sorcerous Dandruff Globe',
|
46 |
+
'Spiritual Invocation of the Costumers',
|
47 |
+
'Ultimate Rite of the Confetti Angel',
|
48 |
+
'Ultimate Ritual of Mouthwash',
|
49 |
+
];
|
50 |
+
|
51 |
+
module.exports = {
|
52 |
+
|
53 |
+
spellList : function(){
|
54 |
+
const levels = ['Cantrips (0 Level)', '1st Level', '2nd Level', '3rd Level', '4th Level', '5th Level', '6th Level', '7th Level', '8th Level', '9th Level'];
|
55 |
+
|
56 |
+
const content = _.map(levels, (level)=>{
|
57 |
+
const spells = _.map(_.sampleSize(spellNames, _.random(5, 15)), (spell)=>{
|
58 |
+
return `- ${spell}`;
|
59 |
+
}).join('\n');
|
60 |
+
return `##### ${level} \n${spells} \n`;
|
61 |
+
}).join('\n');
|
62 |
+
|
63 |
+
return `<div class='spellList'>\n${content}\n</div>`;
|
64 |
+
},
|
65 |
+
|
66 |
+
spell : function(){
|
67 |
+
const level = ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th'];
|
68 |
+
const spellSchools = ['abjuration', 'conjuration', 'divination', 'enchantment', 'evocation', 'illusion', 'necromancy', 'transmutation'];
|
69 |
+
|
70 |
+
|
71 |
+
let components = _.sampleSize(['V', 'S', 'M'], _.random(1, 3)).join(', ');
|
72 |
+
if(components.indexOf('M') !== -1){
|
73 |
+
components += ` (${_.sampleSize(['a small doll', 'a crushed button worth at least 1cp', 'discarded gum wrapper'], _.random(1, 3)).join(', ')})`;
|
74 |
+
}
|
75 |
+
|
76 |
+
return [
|
77 |
+
`#### ${_.sample(spellNames)}`,
|
78 |
+
`*${_.sample(level)}-level ${_.sample(spellSchools)}*`,
|
79 |
+
'___',
|
80 |
+
'- **Casting Time:** 1 action',
|
81 |
+
`- **Range:** ${_.sample(['Self', 'Touch', '30 feet', '60 feet'])}`,
|
82 |
+
`- **Components:** ${components}`,
|
83 |
+
`- **Duration:** ${_.sample(['Until dispelled', '1 round', 'Instantaneous', 'Concentration, up to 10 minutes', '1 hour'])}`,
|
84 |
+
'',
|
85 |
+
'A flame, equivalent in brightness to a torch, springs from an object that you touch. ',
|
86 |
+
'The effect look like a regular flame, but it creates no heat and doesn\'t use oxygen. ',
|
87 |
+
'A *continual flame* can be covered or hidden but not smothered or quenched.',
|
88 |
+
'\n\n\n'
|
89 |
+
].join('\n');
|
90 |
+
}
|
91 |
+
};
|
dependencies/themes/Legacy/5ePHB/snippets/monsterblock.gen.js
ADDED
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const genList = function(list, max){
|
4 |
+
return _.sampleSize(list, _.random(0, max)).join(', ') || 'None';
|
5 |
+
};
|
6 |
+
|
7 |
+
const getMonsterName = function(){
|
8 |
+
return _.sample([
|
9 |
+
'All-devouring Baseball Imp',
|
10 |
+
'All-devouring Gumdrop Wraith',
|
11 |
+
'Chocolate Hydra',
|
12 |
+
'Devouring Peacock',
|
13 |
+
'Economy-sized Colossus of the Lemonade Stand',
|
14 |
+
'Ghost Pigeon',
|
15 |
+
'Gibbering Duck',
|
16 |
+
'Sparklemuffin Peacock Spider',
|
17 |
+
'Gum Elemental',
|
18 |
+
'Illiterate Construct of the Candy Store',
|
19 |
+
'Ineffable Chihuahua',
|
20 |
+
'Irritating Death Hamster',
|
21 |
+
'Irritating Gold Mouse',
|
22 |
+
'Juggernaut Snail',
|
23 |
+
'Juggernaut of the Sock Drawer',
|
24 |
+
'Koala of the Cosmos',
|
25 |
+
'Mad Koala of the West',
|
26 |
+
'Milk Djinni of the Lemonade Stand',
|
27 |
+
'Mind Ferret',
|
28 |
+
'Mystic Salt Spider',
|
29 |
+
'Necrotic Halitosis Angel',
|
30 |
+
'Pinstriped Famine Sheep',
|
31 |
+
'Ritalin Leech',
|
32 |
+
'Shocker Kangaroo',
|
33 |
+
'Stellar Tennis Juggernaut',
|
34 |
+
'Wailing Quail of the Sun',
|
35 |
+
'Angel Pigeon',
|
36 |
+
'Anime Sphinx',
|
37 |
+
'Bored Avalanche Sheep of the Wasteland',
|
38 |
+
'Devouring Nougat Sphinx of the Sock Drawer',
|
39 |
+
'Djinni of the Footlocker',
|
40 |
+
'Ectoplasmic Jazz Devil',
|
41 |
+
'Flatuent Angel',
|
42 |
+
'Gelatinous Duck of the Dream-Lands',
|
43 |
+
'Gelatinous Mouse',
|
44 |
+
'Golem of the Footlocker',
|
45 |
+
'Lich Wombat',
|
46 |
+
'Mechanical Sloth of the Past',
|
47 |
+
'Milkshake Succubus',
|
48 |
+
'Puffy Bone Peacock of the East',
|
49 |
+
'Rainbow Manatee',
|
50 |
+
'Rune Parrot',
|
51 |
+
'Sand Cow',
|
52 |
+
'Sinister Vanilla Dragon',
|
53 |
+
'Snail of the North',
|
54 |
+
'Spider of the Sewer',
|
55 |
+
'Stellar Sawdust Leech',
|
56 |
+
'Storm Anteater of Hell',
|
57 |
+
'Stupid Spirit of the Brewery',
|
58 |
+
'Time Kangaroo',
|
59 |
+
'Tomb Poodle',
|
60 |
+
]);
|
61 |
+
};
|
62 |
+
|
63 |
+
const getType = function(){
|
64 |
+
return `${_.sample(['Tiny', 'Small', 'Medium', 'Large', 'Gargantuan', 'Stupidly vast'])} ${_.sample(['beast', 'fiend', 'annoyance', 'guy', 'cutie'])}`;
|
65 |
+
};
|
66 |
+
|
67 |
+
const getAlignment = function(){
|
68 |
+
return _.sample([
|
69 |
+
'annoying evil',
|
70 |
+
'chaotic gossipy',
|
71 |
+
'chaotic sloppy',
|
72 |
+
'depressed neutral',
|
73 |
+
'lawful bogus',
|
74 |
+
'lawful coy',
|
75 |
+
'manic-depressive evil',
|
76 |
+
'narrow-minded neutral',
|
77 |
+
'neutral annoying',
|
78 |
+
'neutral ignorant',
|
79 |
+
'oedpipal neutral',
|
80 |
+
'silly neutral',
|
81 |
+
'unoriginal neutral',
|
82 |
+
'weird neutral',
|
83 |
+
'wordy evil',
|
84 |
+
'unaligned'
|
85 |
+
]);
|
86 |
+
};
|
87 |
+
|
88 |
+
const getStats = function(){
|
89 |
+
return `>|${_.times(6, function(){
|
90 |
+
const num = _.random(1, 20);
|
91 |
+
const mod = Math.ceil(num/2 - 5);
|
92 |
+
return `${num} (${mod >= 0 ? `+${mod}` : mod})`;
|
93 |
+
}).join('|')}|`;
|
94 |
+
};
|
95 |
+
|
96 |
+
const genAbilities = function(){
|
97 |
+
return _.sample([
|
98 |
+
'> ***Pack Tactics.*** These guys work together. Like super well, you don\'t even know.',
|
99 |
+
'> ***Fowl Appearance.*** While the creature remains motionless, it is indistinguishable from a normal chicken.',
|
100 |
+
'> ***Onion Stench.*** Any creatures within 5 feet of this thing develops an irrational craving for onion rings.',
|
101 |
+
'> ***Enormous Nose.*** This creature gains advantage on any check involving putting things in its nose.',
|
102 |
+
'> ***Sassiness.*** When questioned, this creature will talk back instead of answering.',
|
103 |
+
'> ***Big Jerk.*** Thinks he is just *waaaay* better than you.',
|
104 |
+
]);
|
105 |
+
};
|
106 |
+
|
107 |
+
const genAction = function(){
|
108 |
+
const name = _.sample([
|
109 |
+
'Abdominal Drop',
|
110 |
+
'Airplane Hammer',
|
111 |
+
'Atomic Death Throw',
|
112 |
+
'Bulldog Rake',
|
113 |
+
'Corkscrew Strike',
|
114 |
+
'Crossed Splash',
|
115 |
+
'Crossface Suplex',
|
116 |
+
'DDT Powerbomb',
|
117 |
+
'Dual Cobra Wristlock',
|
118 |
+
'Dual Throw',
|
119 |
+
'Elbow Hold',
|
120 |
+
'Gory Body Sweep',
|
121 |
+
'Heel Jawbreaker',
|
122 |
+
'Jumping Driver',
|
123 |
+
'Open Chin Choke',
|
124 |
+
'Scorpion Flurry',
|
125 |
+
'Somersault Stump Fists',
|
126 |
+
'Suffering Wringer',
|
127 |
+
'Super Hip Submission',
|
128 |
+
'Super Spin',
|
129 |
+
'Team Elbow',
|
130 |
+
'Team Foot',
|
131 |
+
'Tilt-a-whirl Chin Sleeper',
|
132 |
+
'Tilt-a-whirl Eye Takedown',
|
133 |
+
'Turnbuckle Roll'
|
134 |
+
]);
|
135 |
+
|
136 |
+
return `> ***${name}.*** *Melee Weapon Attack:* +4 to hit, reach 5ft., one target. *Hit* 5 (1d6 + 2) `;
|
137 |
+
};
|
138 |
+
|
139 |
+
|
140 |
+
module.exports = {
|
141 |
+
|
142 |
+
full : function(){
|
143 |
+
return `${[
|
144 |
+
'___',
|
145 |
+
'___',
|
146 |
+
`> ## ${getMonsterName()}`,
|
147 |
+
`>*${getType()}, ${getAlignment()}*`,
|
148 |
+
'> ___',
|
149 |
+
`> - **Armor Class** ${_.random(10, 20)}`,
|
150 |
+
`> - **Hit Points** ${_.random(1, 150)}(1d4 + 5)`,
|
151 |
+
`> - **Speed** ${_.random(0, 50)}ft.`,
|
152 |
+
'>___',
|
153 |
+
'>|STR|DEX|CON|INT|WIS|CHA|',
|
154 |
+
'>|:---:|:---:|:---:|:---:|:---:|:---:|',
|
155 |
+
getStats(),
|
156 |
+
'>___',
|
157 |
+
`> - **Condition Immunities** ${genList(['groggy', 'swagged', 'weak-kneed', 'buzzed', 'groovy', 'melancholy', 'drunk'], 3)}`,
|
158 |
+
`> - **Senses** passive Perception ${_.random(3, 20)}`,
|
159 |
+
`> - **Languages** ${genList(['Common', 'Pottymouth', 'Gibberish', 'Latin', 'Jive'], 2)}`,
|
160 |
+
`> - **Challenge** ${_.random(0, 15)} (${_.random(10, 10000)} XP)`,
|
161 |
+
'> ___',
|
162 |
+
_.times(_.random(3, 6), function(){
|
163 |
+
return genAbilities();
|
164 |
+
}).join('\n>\n'),
|
165 |
+
'> ### Actions',
|
166 |
+
_.times(_.random(4, 6), function(){
|
167 |
+
return genAction();
|
168 |
+
}).join('\n>\n'),
|
169 |
+
].join('\n')}\n\n\n`;
|
170 |
+
},
|
171 |
+
|
172 |
+
half : function(){
|
173 |
+
return `${[
|
174 |
+
'___',
|
175 |
+
`> ## ${getMonsterName()}`,
|
176 |
+
`>*${getType()}, ${getAlignment()}*`,
|
177 |
+
'> ___',
|
178 |
+
`> - **Armor Class** ${_.random(10, 20)}`,
|
179 |
+
`> - **Hit Points** ${_.random(1, 150)}(1d4 + 5)`,
|
180 |
+
`> - **Speed** ${_.random(0, 50)}ft.`,
|
181 |
+
'>___',
|
182 |
+
'>|STR|DEX|CON|INT|WIS|CHA|',
|
183 |
+
'>|:---:|:---:|:---:|:---:|:---:|:---:|',
|
184 |
+
getStats(),
|
185 |
+
'>___',
|
186 |
+
`> - **Condition Immunities** ${genList(['groggy', 'swagged', 'weak-kneed', 'buzzed', 'groovy', 'melancholy', 'drunk'], 3)}`,
|
187 |
+
`> - **Senses** passive Perception ${_.random(3, 20)}`,
|
188 |
+
`> - **Languages** ${genList(['Common', 'Pottymouth', 'Gibberish', 'Latin', 'Jive'], 2)}`,
|
189 |
+
`> - **Challenge** ${_.random(0, 15)} (${_.random(10, 10000)} XP)`,
|
190 |
+
'> ___',
|
191 |
+
_.times(_.random(2, 3), function(){
|
192 |
+
return genAbilities();
|
193 |
+
}).join('\n>\n'),
|
194 |
+
'> ### Actions',
|
195 |
+
_.times(_.random(1, 2), function(){
|
196 |
+
return genAction();
|
197 |
+
}).join('\n>\n'),
|
198 |
+
].join('\n')}\n\n\n`;
|
199 |
+
}
|
200 |
+
};
|
dependencies/themes/Legacy/5ePHB/snippets/tableOfContents.gen.js
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const getTOC = (pages)=>{
|
4 |
+
const add1 = (title, page)=>{
|
5 |
+
res.push({
|
6 |
+
title : title,
|
7 |
+
page : page + 1,
|
8 |
+
children : []
|
9 |
+
});
|
10 |
+
};
|
11 |
+
const add2 = (title, page)=>{
|
12 |
+
if(!_.last(res)) add1('', page);
|
13 |
+
_.last(res).children.push({
|
14 |
+
title : title,
|
15 |
+
page : page + 1,
|
16 |
+
children : []
|
17 |
+
});
|
18 |
+
};
|
19 |
+
const add3 = (title, page)=>{
|
20 |
+
if(!_.last(res)) add1('', page);
|
21 |
+
if(!_.last(_.last(res).children)) add2('', page);
|
22 |
+
_.last(_.last(res).children).children.push({
|
23 |
+
title : title,
|
24 |
+
page : page + 1,
|
25 |
+
children : []
|
26 |
+
});
|
27 |
+
};
|
28 |
+
|
29 |
+
const res = [];
|
30 |
+
_.each(pages, (page, pageNum)=>{
|
31 |
+
const lines = page.split('\n');
|
32 |
+
_.each(lines, (line)=>{
|
33 |
+
if(_.startsWith(line, '# ')){
|
34 |
+
const title = line.replace('# ', '');
|
35 |
+
add1(title, pageNum);
|
36 |
+
}
|
37 |
+
if(_.startsWith(line, '## ')){
|
38 |
+
const title = line.replace('## ', '');
|
39 |
+
add2(title, pageNum);
|
40 |
+
}
|
41 |
+
if(_.startsWith(line, '### ')){
|
42 |
+
const title = line.replace('### ', '');
|
43 |
+
add3(title, pageNum);
|
44 |
+
}
|
45 |
+
});
|
46 |
+
});
|
47 |
+
return res;
|
48 |
+
};
|
49 |
+
|
50 |
+
module.exports = function(props){
|
51 |
+
const pages = props.brew.text.split('\\page');
|
52 |
+
const TOC = getTOC(pages);
|
53 |
+
const markdown = _.reduce(TOC, (r, g1, idx1)=>{
|
54 |
+
r.push(`- **[${idx1 + 1} ${g1.title}](#p${g1.page})**`);
|
55 |
+
if(g1.children.length){
|
56 |
+
_.each(g1.children, (g2, idx2)=>{
|
57 |
+
r.push(` - [${idx1 + 1}.${idx2 + 1} ${g2.title}](#p${g2.page})`);
|
58 |
+
if(g2.children.length){
|
59 |
+
_.each(g2.children, (g3, idx3)=>{
|
60 |
+
r.push(` - [${idx1 + 1}.${idx2 + 1}.${idx3 + 1} ${g3.title}](#p${g3.page})`);
|
61 |
+
});
|
62 |
+
}
|
63 |
+
});
|
64 |
+
}
|
65 |
+
return r;
|
66 |
+
}, []).join('\n');
|
67 |
+
|
68 |
+
return `<div class='toc'>
|
69 |
+
##### Table Of Contents
|
70 |
+
${markdown}
|
71 |
+
</div>\n`;
|
72 |
+
};
|
dependencies/themes/Legacy/5ePHB/style.less
ADDED
@@ -0,0 +1,501 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import (less) './themes/fonts/5e legacy/fonts.less';
|
2 |
+
@import (less) './themes/assets/assets.less';
|
3 |
+
@import (less) './themes/phb.depricated.less';
|
4 |
+
//Colors
|
5 |
+
@background : #EEE5CE; // Light parchment
|
6 |
+
@noteGreen : #e0e5c1; // Pastel green
|
7 |
+
@headerUnderline : #c9ad6a; // Gold
|
8 |
+
@horizontalRule : #9c2b1b; // Maroon
|
9 |
+
@headerText : #58180D; // Dark maroon
|
10 |
+
@monsterStatBackground : #FDF1DC; // Lighter parchment
|
11 |
+
@captionText : #766649; // Brown
|
12 |
+
@page { margin: 0; }
|
13 |
+
body {
|
14 |
+
counter-reset : phb-page-numbers;
|
15 |
+
}
|
16 |
+
*{
|
17 |
+
-webkit-print-color-adjust : exact;
|
18 |
+
}
|
19 |
+
.useSansSerif(){
|
20 |
+
font-family : ScalySans;
|
21 |
+
em{
|
22 |
+
font-family : ScalySans;
|
23 |
+
font-style : italic;
|
24 |
+
}
|
25 |
+
strong{
|
26 |
+
font-family : ScalySans;
|
27 |
+
font-weight : 800;
|
28 |
+
letter-spacing : -0.02em;
|
29 |
+
}
|
30 |
+
}
|
31 |
+
.useColumns(@multiplier : 1){
|
32 |
+
column-count : 2;
|
33 |
+
column-fill : auto;
|
34 |
+
column-gap : 1cm;
|
35 |
+
column-width : 8cm * @multiplier;
|
36 |
+
-webkit-column-count : 2;
|
37 |
+
-moz-column-count : 2;
|
38 |
+
-webkit-column-width : 8cm * @multiplier;
|
39 |
+
-moz-column-width : 8cm * @multiplier;
|
40 |
+
-webkit-column-gap : 1cm;
|
41 |
+
-moz-column-gap : 1cm;
|
42 |
+
}
|
43 |
+
.phb, .page{
|
44 |
+
.useColumns();
|
45 |
+
counter-increment : phb-page-numbers;
|
46 |
+
position : relative;
|
47 |
+
z-index : 15;
|
48 |
+
box-sizing : border-box;
|
49 |
+
overflow : hidden;
|
50 |
+
height : 279.4mm;
|
51 |
+
width : 215.9mm;
|
52 |
+
padding : 1.0cm 1.7cm;
|
53 |
+
padding-bottom : 1.5cm;
|
54 |
+
background-color : @background;
|
55 |
+
background-image : @backgroundImage;
|
56 |
+
font-family : BookSanity;
|
57 |
+
font-size : 0.317cm;
|
58 |
+
text-rendering : optimizeLegibility;
|
59 |
+
page-break-before : always;
|
60 |
+
page-break-after : always;
|
61 |
+
contain : size;
|
62 |
+
}
|
63 |
+
|
64 |
+
.phb{
|
65 |
+
//*****************************
|
66 |
+
// * BASE
|
67 |
+
// *****************************/
|
68 |
+
p{
|
69 |
+
padding-bottom : 0.8em;
|
70 |
+
line-height : 1.269em;
|
71 |
+
&+p{
|
72 |
+
margin-top : -0.8em;
|
73 |
+
}
|
74 |
+
}
|
75 |
+
ul{
|
76 |
+
margin-bottom : 0.8em;
|
77 |
+
padding-left : 1.4em;
|
78 |
+
line-height : 1.269em;
|
79 |
+
list-style-position : outside;
|
80 |
+
list-style-type : disc;
|
81 |
+
}
|
82 |
+
ol{
|
83 |
+
margin-bottom : 0.8em;
|
84 |
+
padding-left : 1.4em;
|
85 |
+
line-height : 1.269em;
|
86 |
+
list-style-position : outside;
|
87 |
+
list-style-type : decimal;
|
88 |
+
}
|
89 |
+
//Indents after p or lists
|
90 |
+
p+p, ul+p, ol+p{
|
91 |
+
text-indent : 1em;
|
92 |
+
}
|
93 |
+
img{
|
94 |
+
z-index : -1;
|
95 |
+
}
|
96 |
+
strong{
|
97 |
+
font-weight : bold;
|
98 |
+
letter-spacing : 0.03em;
|
99 |
+
}
|
100 |
+
em{
|
101 |
+
font-style : italic;
|
102 |
+
}
|
103 |
+
sup{
|
104 |
+
vertical-align : super;
|
105 |
+
font-size : smaller;
|
106 |
+
line-height : 0;
|
107 |
+
}
|
108 |
+
sub{
|
109 |
+
vertical-align : sub;
|
110 |
+
font-size : smaller;
|
111 |
+
line-height : 0;
|
112 |
+
}
|
113 |
+
//*****************************
|
114 |
+
// * HEADERS
|
115 |
+
// *****************************/
|
116 |
+
h1,h2,h3,h4{
|
117 |
+
margin-top : 0.2em;
|
118 |
+
margin-bottom : 0.2em;
|
119 |
+
font-family : MrJeeves;
|
120 |
+
font-weight : 800;
|
121 |
+
color : @headerText;
|
122 |
+
}
|
123 |
+
h1{
|
124 |
+
column-span : all;
|
125 |
+
font-size : 0.987cm;
|
126 |
+
-webkit-column-span : all;
|
127 |
+
-moz-column-span : all;
|
128 |
+
&+p::first-letter{
|
129 |
+
float : left;
|
130 |
+
font-family : Solberry;
|
131 |
+
font-size : 10em;
|
132 |
+
color : #222;
|
133 |
+
line-height : 0.795em;
|
134 |
+
}
|
135 |
+
}
|
136 |
+
h2{
|
137 |
+
font-size : 0.705cm;
|
138 |
+
}
|
139 |
+
h3{
|
140 |
+
font-size : 0.529cm;
|
141 |
+
border-bottom : 2px solid @headerUnderline;
|
142 |
+
}
|
143 |
+
h4{
|
144 |
+
margin-bottom : 0.00em;
|
145 |
+
font-size : 0.458cm;
|
146 |
+
}
|
147 |
+
h5{
|
148 |
+
margin-bottom : 0.2em;
|
149 |
+
font-family : ScalySansSmallCaps;
|
150 |
+
font-size : 0.423cm;
|
151 |
+
font-weight : 900;
|
152 |
+
}
|
153 |
+
//*****************************
|
154 |
+
// * TABLE
|
155 |
+
// *****************************/
|
156 |
+
table{
|
157 |
+
.useSansSerif();
|
158 |
+
width : 100%;
|
159 |
+
margin-bottom : 1em;
|
160 |
+
font-size : 10pt;
|
161 |
+
thead{
|
162 |
+
display: table-row-group;
|
163 |
+
font-weight : 800;
|
164 |
+
th{
|
165 |
+
vertical-align : bottom;
|
166 |
+
padding-bottom : 0.3em;
|
167 |
+
padding-right : 0.1em;
|
168 |
+
padding-left : 0.1em;
|
169 |
+
}
|
170 |
+
}
|
171 |
+
tbody{
|
172 |
+
tr{
|
173 |
+
td{
|
174 |
+
padding : 0.3em 0.1em;
|
175 |
+
}
|
176 |
+
&:nth-child(odd){
|
177 |
+
background-color : @noteGreen;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
}
|
181 |
+
}
|
182 |
+
//*****************************
|
183 |
+
// * NOTE
|
184 |
+
// *****************************/
|
185 |
+
blockquote{
|
186 |
+
.useSansSerif();
|
187 |
+
box-sizing : border-box;
|
188 |
+
margin-bottom : 1em;
|
189 |
+
padding : 5px 10px;
|
190 |
+
background-color : @noteGreen;
|
191 |
+
border-style : solid;
|
192 |
+
border-width : 11px;
|
193 |
+
border-image : @noteBorderImage 11;
|
194 |
+
border-image-outset : 9px 0px;
|
195 |
+
box-shadow : 1px 4px 14px #888;
|
196 |
+
p, ul{
|
197 |
+
font-size : 0.352cm;
|
198 |
+
line-height : 1.083em;
|
199 |
+
}
|
200 |
+
}
|
201 |
+
//If a note starts a column, give it space at the top to render border
|
202 |
+
pre+blockquote, h2+blockquote, h3+blockquote, h4+blockquote, h5+blockquote {
|
203 |
+
margin-top : 13px;
|
204 |
+
}
|
205 |
+
//*****************************
|
206 |
+
// * MONSTER STAT BLOCK
|
207 |
+
// *****************************/
|
208 |
+
hr+blockquote{
|
209 |
+
position : relative;
|
210 |
+
padding-top : 15px;
|
211 |
+
background-color : @monsterStatBackground;
|
212 |
+
border-style : solid;
|
213 |
+
border-width : 10px;
|
214 |
+
border-image : @monsterBorderImageLegacy 10;
|
215 |
+
h2{
|
216 |
+
margin-top : -8px;
|
217 |
+
margin-bottom : 0px;
|
218 |
+
&+p{
|
219 |
+
padding-bottom : 0px;
|
220 |
+
}
|
221 |
+
}
|
222 |
+
h3{
|
223 |
+
font-family : ScalySans;
|
224 |
+
font-weight : 400;
|
225 |
+
border-bottom : 1px solid @headerText;
|
226 |
+
}
|
227 |
+
hr+ul{
|
228 |
+
color : @headerText;
|
229 |
+
}
|
230 |
+
ul{
|
231 |
+
.useSansSerif();
|
232 |
+
padding-left : 1em;
|
233 |
+
font-size : 0.352cm;
|
234 |
+
}
|
235 |
+
// Monster Ability table
|
236 |
+
hr+table{
|
237 |
+
margin : 0;
|
238 |
+
background-color : transparent;
|
239 |
+
border-style : none;
|
240 |
+
border-image : none;
|
241 |
+
tbody{
|
242 |
+
tr:nth-child(odd), tr:nth-child(even){
|
243 |
+
background-color : transparent;
|
244 |
+
}
|
245 |
+
}
|
246 |
+
}
|
247 |
+
table{
|
248 |
+
color : @headerText;
|
249 |
+
}
|
250 |
+
p+p{
|
251 |
+
margin-top : 0em;
|
252 |
+
padding-bottom : 0.5em;
|
253 |
+
text-indent : 0em;
|
254 |
+
}
|
255 |
+
//Triangle dividers
|
256 |
+
hr{
|
257 |
+
visibility : visible;
|
258 |
+
height : 6px;
|
259 |
+
margin : 4px 0px;
|
260 |
+
background-image : @redTriangleImage;
|
261 |
+
background-size : 100% 100%;
|
262 |
+
border : none;
|
263 |
+
}
|
264 |
+
}
|
265 |
+
//Full Width
|
266 |
+
hr+hr+blockquote{
|
267 |
+
.useColumns(0.96);
|
268 |
+
column-fill : balance;
|
269 |
+
}
|
270 |
+
//*****************************
|
271 |
+
// * FOOTER
|
272 |
+
// *****************************/
|
273 |
+
&:after{
|
274 |
+
content : "";
|
275 |
+
position : absolute;
|
276 |
+
bottom : 0px;
|
277 |
+
left : 0px;
|
278 |
+
z-index : 100;
|
279 |
+
height : 50px;
|
280 |
+
width : 100%;
|
281 |
+
background-image : @footerAccentImage;
|
282 |
+
background-size : cover;
|
283 |
+
}
|
284 |
+
&:nth-child(even){
|
285 |
+
&:after{
|
286 |
+
transform : scaleX(-1);
|
287 |
+
}
|
288 |
+
.pageNumber{
|
289 |
+
left : 2px;
|
290 |
+
}
|
291 |
+
.footnote{
|
292 |
+
left : 80px;
|
293 |
+
text-align : left;
|
294 |
+
}
|
295 |
+
}
|
296 |
+
.pageNumber{
|
297 |
+
position : absolute;
|
298 |
+
right : 2px;
|
299 |
+
bottom : 22px;
|
300 |
+
width : 50px;
|
301 |
+
font-size : 0.9em;
|
302 |
+
color : #c9ad6a;
|
303 |
+
text-align : center;
|
304 |
+
&.auto::after {
|
305 |
+
content : counter(phb-page-numbers);
|
306 |
+
}
|
307 |
+
}
|
308 |
+
.footnote{
|
309 |
+
position : absolute;
|
310 |
+
right : 80px;
|
311 |
+
bottom : 32px;
|
312 |
+
z-index : 150;
|
313 |
+
width : 200px;
|
314 |
+
font-size : 0.8em;
|
315 |
+
color : #c9ad6a;
|
316 |
+
text-align : right;
|
317 |
+
}
|
318 |
+
//*****************************
|
319 |
+
// * EXTRAS
|
320 |
+
// *****************************/
|
321 |
+
hr{
|
322 |
+
visibility : hidden;
|
323 |
+
margin : 0px;
|
324 |
+
}
|
325 |
+
//Modified unorder list, used in spells
|
326 |
+
hr+ul{
|
327 |
+
margin-bottom : 0.5em;
|
328 |
+
padding-left : 1em;
|
329 |
+
text-indent : -1em;
|
330 |
+
list-style-type : none;
|
331 |
+
}
|
332 |
+
//Column Break
|
333 |
+
pre, code{
|
334 |
+
visibility : hidden;
|
335 |
+
-webkit-column-break-after : always;
|
336 |
+
break-after : always;
|
337 |
+
-moz-column-break-after : always;
|
338 |
+
}
|
339 |
+
//Avoid breaking up
|
340 |
+
p,blockquote,table{
|
341 |
+
z-index : 15;
|
342 |
+
-webkit-column-break-inside : avoid;
|
343 |
+
page-break-inside : avoid;
|
344 |
+
break-inside : avoid;
|
345 |
+
}
|
346 |
+
//Better spacing for spell blocks
|
347 |
+
h4+p+hr+ul{
|
348 |
+
margin-top : -0.5em
|
349 |
+
}
|
350 |
+
//Text indent right after table
|
351 |
+
table+p{
|
352 |
+
text-indent : 1em;
|
353 |
+
}
|
354 |
+
// Nested lists
|
355 |
+
ul ul,ol ol,ul ol,ol ul{
|
356 |
+
margin-bottom : 0px;
|
357 |
+
margin-left : 1.5em;
|
358 |
+
}
|
359 |
+
li{
|
360 |
+
-webkit-column-break-inside : avoid;
|
361 |
+
page-break-inside : avoid;
|
362 |
+
break-inside : avoid;
|
363 |
+
}
|
364 |
+
}
|
365 |
+
//*****************************
|
366 |
+
// * SPELL LIST
|
367 |
+
// *****************************/
|
368 |
+
.phb .spellList{
|
369 |
+
.useSansSerif();
|
370 |
+
column-count : 4;
|
371 |
+
column-span : all;
|
372 |
+
-webkit-column-span : all;
|
373 |
+
-moz-column-span : all;
|
374 |
+
ul+h5{
|
375 |
+
margin-top : 15px;
|
376 |
+
}
|
377 |
+
p, ul{
|
378 |
+
font-size : 0.352cm;
|
379 |
+
line-height : 1.263em;
|
380 |
+
}
|
381 |
+
ul{
|
382 |
+
margin-bottom : 0.5em;
|
383 |
+
padding-left : 1em;
|
384 |
+
text-indent : -1em;
|
385 |
+
list-style-type : none;
|
386 |
+
-webkit-column-break-inside : auto;
|
387 |
+
page-break-inside : auto;
|
388 |
+
break-inside : auto;
|
389 |
+
}
|
390 |
+
}
|
391 |
+
//*****************************
|
392 |
+
// * WIDE
|
393 |
+
// *****************************/
|
394 |
+
.phb .wide{
|
395 |
+
column-span : all;
|
396 |
+
-webkit-column-span : all;
|
397 |
+
-moz-column-span : all;
|
398 |
+
}
|
399 |
+
//*****************************
|
400 |
+
// * CLASS TABLE
|
401 |
+
// *****************************/
|
402 |
+
.phb .classTable{
|
403 |
+
margin-top : 25px;
|
404 |
+
margin-bottom : 40px;
|
405 |
+
border-collapse : separate;
|
406 |
+
background-color : white;
|
407 |
+
border : initial;
|
408 |
+
border-style : solid;
|
409 |
+
border-image-outset : 25px 17px;
|
410 |
+
border-image-repeat : stretch;
|
411 |
+
border-image-slice : 150 200 150 200;
|
412 |
+
border-image-source : @frameBorderImage;
|
413 |
+
border-image-width : 47px;
|
414 |
+
h5{
|
415 |
+
margin-bottom : 10px;
|
416 |
+
}
|
417 |
+
}
|
418 |
+
//************************************
|
419 |
+
// * DESCRIPTIVE TEXT BOX
|
420 |
+
// ************************************/
|
421 |
+
.phb .descriptive{
|
422 |
+
margin-bottom : 1em;
|
423 |
+
background-color : #faf7ea;
|
424 |
+
font-family : ScalySans;
|
425 |
+
border-style : solid;
|
426 |
+
border-width : 7px;
|
427 |
+
border-image : @descriptiveBoxImage 12 stretch;
|
428 |
+
border-image-outset : 4px;
|
429 |
+
box-shadow : 0px 0px 6px #faf7ea;
|
430 |
+
p{
|
431 |
+
display : block;
|
432 |
+
padding-bottom : 0px;
|
433 |
+
line-height : 1.47em;
|
434 |
+
}
|
435 |
+
p + p {
|
436 |
+
padding-top : .8em;
|
437 |
+
}
|
438 |
+
em {
|
439 |
+
font-family : ScalySans;
|
440 |
+
font-style : italic;
|
441 |
+
}
|
442 |
+
strong {
|
443 |
+
font-family : ScalySans;
|
444 |
+
font-weight : 800;
|
445 |
+
letter-spacing : -0.02em;
|
446 |
+
}
|
447 |
+
}
|
448 |
+
.phb pre+.descriptive{
|
449 |
+
margin-top : 8px;
|
450 |
+
}
|
451 |
+
|
452 |
+
//*****************************
|
453 |
+
// * ARTIST CREDIT BLOCK
|
454 |
+
// *****************************/
|
455 |
+
.phb {
|
456 |
+
.artist {
|
457 |
+
position : absolute;
|
458 |
+
text-align : center;
|
459 |
+
font-family : WalterTurncoat;
|
460 |
+
font-size : 0.27cm;
|
461 |
+
color : @captionText;
|
462 |
+
p, p + p {
|
463 |
+
margin : unset;
|
464 |
+
text-indent : unset;
|
465 |
+
line-height : 0.941em;
|
466 |
+
}
|
467 |
+
h5 {
|
468 |
+
font-size : 1.3em;
|
469 |
+
font-family : WalterTurncoat;
|
470 |
+
}
|
471 |
+
a{
|
472 |
+
color : inherit;
|
473 |
+
text-decoration : unset;
|
474 |
+
&:hover {
|
475 |
+
text-decoration : underline;
|
476 |
+
}
|
477 |
+
}
|
478 |
+
}
|
479 |
+
}
|
480 |
+
//*****************************
|
481 |
+
// * TABLE OF CONTENTS
|
482 |
+
// *****************************/
|
483 |
+
.phb .toc{
|
484 |
+
-webkit-column-break-inside : avoid;
|
485 |
+
page-break-inside : avoid;
|
486 |
+
break-inside : avoid;
|
487 |
+
a{
|
488 |
+
color : black;
|
489 |
+
text-decoration : none;
|
490 |
+
&:hover{
|
491 |
+
text-decoration : underline;
|
492 |
+
}
|
493 |
+
}
|
494 |
+
ul{
|
495 |
+
padding-left : 0;
|
496 |
+
list-style-type : none;
|
497 |
+
}
|
498 |
+
&>ul>li{
|
499 |
+
margin-bottom : 10px;
|
500 |
+
}
|
501 |
+
}
|
dependencies/themes/V3/5eDMG/dropdownPreview.png
ADDED
Git LFS Details
|
dependencies/themes/V3/5eDMG/dropdownTexture.png
ADDED
Git LFS Details
|
dependencies/themes/V3/5eDMG/settings.json
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name" : "5e DMG",
|
3 |
+
"renderer" : "V3",
|
4 |
+
"baseTheme" : "5ePHB",
|
5 |
+
"baseSnippets" : "5ePHB"
|
6 |
+
}
|
dependencies/themes/V3/5eDMG/snippets.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* eslint-disable max-lines */
|
2 |
+
|
3 |
+
module.exports = [
|
4 |
+
];
|
dependencies/themes/V3/5eDMG/style.less
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import (less) './themes/assets/assets.less';
|
2 |
+
|
3 |
+
:root {
|
4 |
+
//Colors
|
5 |
+
--HB_Color_Accent : #EBCEC3; // Salmon
|
6 |
+
--HB_Color_Footnotes : #5C5C5C; // Dark gray
|
7 |
+
}
|
8 |
+
|
9 |
+
.page {
|
10 |
+
background-image : url(/assets/DMG_background.png);
|
11 |
+
background-size : cover;
|
12 |
+
|
13 |
+
/*TABLES WITHIN NOTES*/
|
14 |
+
.note table tbody tr:nth-child(odd) {
|
15 |
+
background:#fff;
|
16 |
+
}
|
17 |
+
|
18 |
+
/*DROP CAP*/
|
19 |
+
h1 + p::first-letter {
|
20 |
+
background-image: unset;
|
21 |
+
color:black;
|
22 |
+
}
|
23 |
+
|
24 |
+
.quote p:first-child::first-line {
|
25 |
+
all: unset;
|
26 |
+
}
|
27 |
+
|
28 |
+
&:after {
|
29 |
+
background-image : url(/assets/DMG_footerAccent.png);
|
30 |
+
height: 58px;
|
31 |
+
}
|
32 |
+
|
33 |
+
.footnote {
|
34 |
+
bottom : 40px;
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
.page:has(.partCover) {
|
39 |
+
|
40 |
+
.partCover {
|
41 |
+
background-image: @partCoverHeaderDMG;
|
42 |
+
}
|
43 |
+
}
|
dependencies/themes/V3/5ePHB/dropdownPreview.png
ADDED
Git LFS Details
|
dependencies/themes/V3/5ePHB/dropdownTexture.png
ADDED
Git LFS Details
|
dependencies/themes/V3/5ePHB/settings.json
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name" : "5e PHB",
|
3 |
+
"renderer" : "V3",
|
4 |
+
"baseTheme" : false,
|
5 |
+
"baseSnippets" : false
|
6 |
+
}
|
dependencies/themes/V3/5ePHB/snippets.js
ADDED
@@ -0,0 +1,327 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* eslint-disable max-lines */
|
2 |
+
|
3 |
+
const MagicGen = require('./snippets/magic.gen.js');
|
4 |
+
const ClassTableGen = require('./snippets/classtable.gen.js');
|
5 |
+
const MonsterBlockGen = require('./snippets/monsterblock.gen.js');
|
6 |
+
const scriptGen = require('./snippets/script.gen.js');
|
7 |
+
const ClassFeatureGen = require('./snippets/classfeature.gen.js');
|
8 |
+
const CoverPageGen = require('./snippets/coverpage.gen.js');
|
9 |
+
const TableOfContentsGen = require('./snippets/tableOfContents.gen.js');
|
10 |
+
const indexGen = require('./snippets/index.gen.js');
|
11 |
+
const QuoteGen = require('./snippets/quote.gen.js');
|
12 |
+
const dedent = require('dedent-tabs').default;
|
13 |
+
|
14 |
+
|
15 |
+
|
16 |
+
module.exports = [
|
17 |
+
|
18 |
+
{
|
19 |
+
groupName : 'Text Editor',
|
20 |
+
icon : 'fas fa-pencil-alt',
|
21 |
+
view : 'text',
|
22 |
+
snippets : [
|
23 |
+
{
|
24 |
+
name : 'Table of Contents',
|
25 |
+
icon : 'fas fa-book',
|
26 |
+
gen : TableOfContentsGen
|
27 |
+
},
|
28 |
+
{
|
29 |
+
name : 'Index',
|
30 |
+
icon : 'fas fa-bars',
|
31 |
+
gen : indexGen,
|
32 |
+
experimental : true
|
33 |
+
}
|
34 |
+
]
|
35 |
+
},
|
36 |
+
{
|
37 |
+
groupName : 'Style Editor',
|
38 |
+
icon : 'fas fa-pencil-alt',
|
39 |
+
view : 'style',
|
40 |
+
snippets : [
|
41 |
+
{
|
42 |
+
name : 'Remove Drop Cap',
|
43 |
+
icon : 'fas fa-remove-format',
|
44 |
+
gen : dedent`/* Removes Drop Caps */
|
45 |
+
.page h1+p:first-letter {
|
46 |
+
all: unset;
|
47 |
+
}\n\n
|
48 |
+
/* Removes Small-Caps in first line */
|
49 |
+
.page h1+p:first-line {
|
50 |
+
all: unset;
|
51 |
+
}`
|
52 |
+
},
|
53 |
+
{
|
54 |
+
name : 'Tweak Drop Cap',
|
55 |
+
icon : 'fas fa-sliders-h',
|
56 |
+
gen : dedent`/* Drop Cap settings */
|
57 |
+
.page h1 + p::first-letter {
|
58 |
+
font-family: SolberaImitationRemake;
|
59 |
+
font-size: 3.5cm;
|
60 |
+
background-image: linear-gradient(-45deg, #322814, #998250, #322814);
|
61 |
+
line-height: 1em;
|
62 |
+
}\n\n`
|
63 |
+
}
|
64 |
+
]
|
65 |
+
},
|
66 |
+
|
67 |
+
/*********************** IMAGES *******************/
|
68 |
+
{
|
69 |
+
groupName : 'Images',
|
70 |
+
icon : 'fas fa-images',
|
71 |
+
view : 'text',
|
72 |
+
snippets : [
|
73 |
+
{
|
74 |
+
name : 'Image',
|
75 |
+
icon : 'fas fa-image',
|
76 |
+
gen : dedent`
|
77 |
+
![cat warrior](https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg) {width:325px,mix-blend-mode:multiply}
|
78 |
+
|
79 |
+
{{artist,position:relative,top:-230px,left:10px,margin-bottom:-30px
|
80 |
+
##### Cat Warrior
|
81 |
+
[Kyoung Hwan Kim](https://www.artstation.com/tahra)
|
82 |
+
}}`
|
83 |
+
},
|
84 |
+
{
|
85 |
+
name : 'Background Image',
|
86 |
+
icon : 'fas fa-tree',
|
87 |
+
gen : dedent`
|
88 |
+
![homebrew mug](http://i.imgur.com/hMna6G0.png) {position:absolute,top:50px,right:30px,width:280px}
|
89 |
+
|
90 |
+
{{artist,top:80px,right:30px
|
91 |
+
##### Homebrew Mug
|
92 |
+
[naturalcrit](https://homebrew.naturalcrit.com)
|
93 |
+
}}`
|
94 |
+
},
|
95 |
+
{
|
96 |
+
name : 'Watermark',
|
97 |
+
icon : 'fas fa-id-card',
|
98 |
+
gen : dedent`
|
99 |
+
{{watermark Homebrewery}}\n`
|
100 |
+
},
|
101 |
+
]
|
102 |
+
},
|
103 |
+
|
104 |
+
|
105 |
+
/************************* PHB ********************/
|
106 |
+
|
107 |
+
{
|
108 |
+
groupName : 'PHB',
|
109 |
+
icon : 'fas fa-book',
|
110 |
+
view : 'text',
|
111 |
+
snippets : [
|
112 |
+
{
|
113 |
+
name : 'Spell',
|
114 |
+
icon : 'fas fa-magic',
|
115 |
+
gen : MagicGen.spell,
|
116 |
+
},
|
117 |
+
{
|
118 |
+
name : 'Spell List',
|
119 |
+
icon : 'fas fa-scroll',
|
120 |
+
gen : MagicGen.spellList,
|
121 |
+
},
|
122 |
+
{
|
123 |
+
name : 'Class Feature',
|
124 |
+
icon : 'fas fa-mask',
|
125 |
+
gen : ClassFeatureGen,
|
126 |
+
},
|
127 |
+
{
|
128 |
+
name : 'Quote',
|
129 |
+
icon : 'fas fa-quote-right',
|
130 |
+
gen : QuoteGen,
|
131 |
+
},
|
132 |
+
{
|
133 |
+
name : 'Note',
|
134 |
+
icon : 'fas fa-sticky-note',
|
135 |
+
gen : function(){
|
136 |
+
return dedent`
|
137 |
+
{{note
|
138 |
+
##### Time to Drop Knowledge
|
139 |
+
Use notes to point out some interesting information.
|
140 |
+
|
141 |
+
**Tables and lists** both work within a note.
|
142 |
+
}}
|
143 |
+
\n`;
|
144 |
+
},
|
145 |
+
},
|
146 |
+
{
|
147 |
+
name : 'Descriptive Text Box',
|
148 |
+
icon : 'fas fa-comment-alt',
|
149 |
+
gen : function(){
|
150 |
+
return dedent`
|
151 |
+
{{descriptive
|
152 |
+
##### Time to Drop Knowledge
|
153 |
+
Use descriptive boxes to highlight text that should be read aloud.
|
154 |
+
|
155 |
+
**Tables and lists** both work within a descriptive box.
|
156 |
+
}}
|
157 |
+
\n`;
|
158 |
+
},
|
159 |
+
},
|
160 |
+
{
|
161 |
+
name : 'Monster Stat Block (unframed)',
|
162 |
+
icon : 'fas fa-paw',
|
163 |
+
gen : MonsterBlockGen.monster('monster', 2),
|
164 |
+
},
|
165 |
+
{
|
166 |
+
name : 'Monster Stat Block',
|
167 |
+
icon : 'fas fa-spider',
|
168 |
+
gen : MonsterBlockGen.monster('monster,frame', 2),
|
169 |
+
},
|
170 |
+
{
|
171 |
+
name : 'Wide Monster Stat Block',
|
172 |
+
icon : 'fas fa-dragon',
|
173 |
+
gen : MonsterBlockGen.monster('monster,frame,wide', 4),
|
174 |
+
},
|
175 |
+
{
|
176 |
+
name : 'Front Cover Page',
|
177 |
+
icon : 'fac book-front-cover',
|
178 |
+
gen : CoverPageGen.front,
|
179 |
+
experimental : true
|
180 |
+
},
|
181 |
+
{
|
182 |
+
name : 'Inside Cover Page',
|
183 |
+
icon : 'fac book-inside-cover',
|
184 |
+
gen : CoverPageGen.inside,
|
185 |
+
experimental : true
|
186 |
+
},
|
187 |
+
{
|
188 |
+
name : 'Part Cover Page',
|
189 |
+
icon : 'fac book-part-cover',
|
190 |
+
gen : CoverPageGen.part,
|
191 |
+
experimental : true
|
192 |
+
},
|
193 |
+
{
|
194 |
+
name : 'Back Cover Page',
|
195 |
+
icon : 'fac book-back-cover',
|
196 |
+
gen : CoverPageGen.back,
|
197 |
+
experimental : true
|
198 |
+
},
|
199 |
+
{
|
200 |
+
name : 'Magic Item',
|
201 |
+
icon : 'fas fa-hat-wizard',
|
202 |
+
gen : MagicGen.item,
|
203 |
+
},
|
204 |
+
{
|
205 |
+
name : 'Artist Credit',
|
206 |
+
icon : 'fas fa-signature',
|
207 |
+
gen : function(){
|
208 |
+
return dedent`
|
209 |
+
{{artist,top:90px,right:30px
|
210 |
+
##### Starry Night
|
211 |
+
[Van Gogh](https://www.vangoghmuseum.nl/en)
|
212 |
+
}}
|
213 |
+
\n`;
|
214 |
+
},
|
215 |
+
}
|
216 |
+
]
|
217 |
+
},
|
218 |
+
|
219 |
+
|
220 |
+
|
221 |
+
/********************* TABLES *********************/
|
222 |
+
|
223 |
+
{
|
224 |
+
groupName : 'Tables',
|
225 |
+
icon : 'fas fa-table',
|
226 |
+
view : 'text',
|
227 |
+
snippets : [
|
228 |
+
{
|
229 |
+
name : 'Class Tables',
|
230 |
+
icon : 'fas fa-table',
|
231 |
+
gen : ClassTableGen.full('classTable,frame,decoration,wide'),
|
232 |
+
subsnippets : [
|
233 |
+
{
|
234 |
+
name : 'Martial Class Table',
|
235 |
+
icon : 'fas fa-table',
|
236 |
+
gen : ClassTableGen.non('classTable,frame,decoration'),
|
237 |
+
},
|
238 |
+
{
|
239 |
+
name : 'Martial Class Table (unframed)',
|
240 |
+
icon : 'fas fa-border-none',
|
241 |
+
gen : ClassTableGen.non('classTable'),
|
242 |
+
},
|
243 |
+
{
|
244 |
+
name : 'Full Caster Class Table',
|
245 |
+
icon : 'fas fa-table',
|
246 |
+
gen : ClassTableGen.full('classTable,frame,decoration,wide'),
|
247 |
+
},
|
248 |
+
{
|
249 |
+
name : 'Full Caster Class Table (unframed)',
|
250 |
+
icon : 'fas fa-border-none',
|
251 |
+
gen : ClassTableGen.full('classTable,wide'),
|
252 |
+
},
|
253 |
+
{
|
254 |
+
name : 'Half Caster Class Table',
|
255 |
+
icon : 'fas fa-list-alt',
|
256 |
+
gen : ClassTableGen.half('classTable,frame,decoration,wide'),
|
257 |
+
},
|
258 |
+
{
|
259 |
+
name : 'Half Caster Class Table (unframed)',
|
260 |
+
icon : 'fas fa-border-none',
|
261 |
+
gen : ClassTableGen.half('classTable,wide'),
|
262 |
+
},
|
263 |
+
{
|
264 |
+
name : 'Third Caster Spell Table',
|
265 |
+
icon : 'fas fa-border-all',
|
266 |
+
gen : ClassTableGen.third('classTable,frame,decoration'),
|
267 |
+
},
|
268 |
+
{
|
269 |
+
name : 'Third Caster Spell Table (unframed)',
|
270 |
+
icon : 'fas fa-border-none',
|
271 |
+
gen : ClassTableGen.third('classTable'),
|
272 |
+
}
|
273 |
+
]
|
274 |
+
},
|
275 |
+
{
|
276 |
+
name : 'Rune Table',
|
277 |
+
icon : 'fas fa-language',
|
278 |
+
gen : scriptGen.dwarvish,
|
279 |
+
experimental : true,
|
280 |
+
subsnippets : [
|
281 |
+
{
|
282 |
+
name : 'Dwarvish',
|
283 |
+
icon : 'fac davek',
|
284 |
+
gen : scriptGen.dwarvish,
|
285 |
+
},
|
286 |
+
{
|
287 |
+
name : 'Elvish',
|
288 |
+
icon : 'fac rellanic',
|
289 |
+
gen : scriptGen.elvish,
|
290 |
+
},
|
291 |
+
{
|
292 |
+
name : 'Draconic',
|
293 |
+
icon : 'fac iokharic',
|
294 |
+
gen : scriptGen.draconic,
|
295 |
+
},
|
296 |
+
]
|
297 |
+
},
|
298 |
+
]
|
299 |
+
},
|
300 |
+
|
301 |
+
|
302 |
+
|
303 |
+
|
304 |
+
/**************** PAGE *************/
|
305 |
+
|
306 |
+
{
|
307 |
+
groupName : 'Print',
|
308 |
+
icon : 'fas fa-print',
|
309 |
+
view : 'style',
|
310 |
+
snippets : [
|
311 |
+
{
|
312 |
+
name : 'Ink Friendly',
|
313 |
+
icon : 'fas fa-tint',
|
314 |
+
gen : dedent`
|
315 |
+
/* Ink Friendly */
|
316 |
+
*:is(.page,.monster,.note,.descriptive) {
|
317 |
+
background : white !important;
|
318 |
+
filter : drop-shadow(0px 0px 3px #888) !important;
|
319 |
+
}
|
320 |
+
|
321 |
+
.page img {
|
322 |
+
visibility : hidden;
|
323 |
+
}\n\n`
|
324 |
+
},
|
325 |
+
]
|
326 |
+
}
|
327 |
+
];
|
dependencies/themes/V3/5ePHB/snippets/classfeature.gen.js
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
const dedent = require('dedent-tabs').default;
|
3 |
+
|
4 |
+
module.exports = function(classname){
|
5 |
+
|
6 |
+
classname = _.sample(['archivist', 'fancyman', 'linguist', 'fletcher',
|
7 |
+
'notary', 'berserker-typist', 'fishmongerer', 'manicurist', 'haberdasher', 'concierge']);
|
8 |
+
|
9 |
+
classname = classname.toLowerCase();
|
10 |
+
|
11 |
+
const hitDie = _.sample([4, 6, 8, 10, 12]);
|
12 |
+
const spellSkill = _.sample(['Wisdom', 'Charisma', 'Intelligence']);
|
13 |
+
|
14 |
+
const abilityList = ['Strength', 'Dexerity', 'Constitution', 'Wisdom', 'Charisma', 'Intelligence'];
|
15 |
+
const skillList = ['Acrobatics', 'Animal Handling', 'Arcana', 'Athletics', 'Deception', 'History', 'Insight', 'Intimidation', 'Investigation', 'Medicine', 'Nature', 'Perception', 'Performance', 'Persuasion', 'Religion', 'Sleight of Hand', 'Stealth', 'Survival'];
|
16 |
+
|
17 |
+
|
18 |
+
return dedent`
|
19 |
+
## Class Features
|
20 |
+
|
21 |
+
As a ${classname}, you gain the following class features
|
22 |
+
|
23 |
+
#### Hit Points
|
24 |
+
**Hit Dice:** :: 1d${hitDie} per ${classname} level
|
25 |
+
**Hit Points at 1st Level:** :: ${hitDie} + your Constitution modifier
|
26 |
+
**Hit Points at Higher Levels:** :: 1d${hitDie} (or ${hitDie/2 + 1}) + your Constitution modifier per ${classname} level after 1st
|
27 |
+
|
28 |
+
#### Proficiencies
|
29 |
+
**Armor:** :: ${_.sampleSize(['Light armor', 'Medium armor', 'Heavy armor', 'Shields'], _.random(0, 3)).join(', ') || 'None'}
|
30 |
+
**Weapons:** :: ${_.sampleSize(['Squeegee', 'Rubber Chicken', 'Simple weapons', 'Martial weapons'], _.random(0, 2)).join(', ') || 'None'}
|
31 |
+
**Tools:** :: ${_.sampleSize(['Artisan\'s tools', 'one musical instrument', 'Thieves\' tools'], _.random(0, 2)).join(', ') || 'None'}
|
32 |
+
|
33 |
+
**Saving Throws:** :: ${_.sampleSize(abilityList, 2).join(', ')}
|
34 |
+
**Skills:** :: Choose two from ${_.sampleSize(skillList, _.random(4, 6)).join(', ')}
|
35 |
+
|
36 |
+
#### Spellcasting Ability
|
37 |
+
{{text-align:center
|
38 |
+
**Spell save DC**:: = ${_.sample([6, 8, 10])} + your proficiency bonus + your ${spellSkill} modifier
|
39 |
+
|
40 |
+
**Spell attack modifier**:: = your proficiency bonus + your ${spellSkill} modifier
|
41 |
+
}}
|
42 |
+
|
43 |
+
#### Equipment
|
44 |
+
You start with the following equipment, in addition to the equipment granted by your background:
|
45 |
+
- (*a*) a martial weapon and a shield or (*b*) two martial weapons
|
46 |
+
- (*a*) five javelins or (*b*) any simple melee weapon
|
47 |
+
- ${_.sample(['10 lint fluffs', '1 button', 'a cherished lost sock'])}
|
48 |
+
`;
|
49 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/classtable.gen.js
ADDED
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
const dedent = require('dedent-tabs').default;
|
3 |
+
|
4 |
+
const features = [
|
5 |
+
'Astrological Botany', 'Biochemical Sorcery', 'Civil Divination',
|
6 |
+
'Consecrated Augury', 'Demonic Anthropology', 'Divinatory Mineralogy',
|
7 |
+
'Exo Interfacer', 'Genetic Banishing', 'Gunpowder Torturer',
|
8 |
+
'Gunslinger Corruptor', 'Hermetic Geography', 'Immunological Cultist',
|
9 |
+
'Malefic Chemist', 'Mathematical Pharmacy', 'Nuclear Biochemistry',
|
10 |
+
'Orbital Gravedigger', 'Pharmaceutical Outlaw', 'Phased Linguist',
|
11 |
+
'Plasma Gunslinger', 'Police Necromancer', 'Ritual Astronomy',
|
12 |
+
'Sixgun Poisoner', 'Seismological Alchemy', 'Spiritual Illusionism',
|
13 |
+
'Statistical Occultism', 'Spell Analyst', 'Torque Interfacer'
|
14 |
+
].map((f)=>_.padEnd(f, 21)); // Pad to equal length of 21 chars long
|
15 |
+
|
16 |
+
const classnames = [
|
17 |
+
'Ackerman', 'Berserker-Typist', 'Concierge', 'Fishmonger',
|
18 |
+
'Haberdasher', 'Manicurist', 'Netrunner', 'Weirkeeper'
|
19 |
+
];
|
20 |
+
|
21 |
+
module.exports = {
|
22 |
+
non : function(snippetClasses){
|
23 |
+
return dedent`
|
24 |
+
{{${snippetClasses}
|
25 |
+
##### The ${_.sample(classnames)}
|
26 |
+
| Level | Proficiency Bonus | Features | ${_.sample(features)} |
|
27 |
+
|:-----:|:-----------------:|:---------|:---------------------:|
|
28 |
+
| 1st | +2 | ${_.sample(features)} | 2 |
|
29 |
+
| 2nd | +2 | ${_.sample(features)} | 2 |
|
30 |
+
| 3rd | +2 | ${_.sample(features)} | 3 |
|
31 |
+
| 4th | +2 | ${_.sample(features)} | 3 |
|
32 |
+
| 5th | +3 | ${_.sample(features)} | 3 |
|
33 |
+
| 6th | +3 | ${_.sample(features)} | 4 |
|
34 |
+
| 7th | +3 | ${_.sample(features)} | 4 |
|
35 |
+
| 8th | +3 | ${_.sample(features)} | 4 |
|
36 |
+
| 9th | +4 | ${_.sample(features)} | 4 |
|
37 |
+
| 10th | +4 | ${_.sample(features)} | 4 |
|
38 |
+
| 11th | +4 | ${_.sample(features)} | 4 |
|
39 |
+
| 12th | +4 | ${_.sample(features)} | 5 |
|
40 |
+
| 13th | +5 | ${_.sample(features)} | 5 |
|
41 |
+
| 14th | +5 | ${_.sample(features)} | 5 |
|
42 |
+
| 15th | +5 | ${_.sample(features)} | 5 |
|
43 |
+
| 16th | +5 | ${_.sample(features)} | 5 |
|
44 |
+
| 17th | +6 | ${_.sample(features)} | 6 |
|
45 |
+
| 18th | +6 | ${_.sample(features)} | 6 |
|
46 |
+
| 19th | +6 | ${_.sample(features)} | 6 |
|
47 |
+
| 20th | +6 | ${_.sample(features)} | unlimited |
|
48 |
+
}}\n\n`;
|
49 |
+
},
|
50 |
+
|
51 |
+
full : function(snippetClasses){
|
52 |
+
return dedent`
|
53 |
+
{{${snippetClasses}
|
54 |
+
##### The ${_.sample(classnames)}
|
55 |
+
| Level | Proficiency | Features | Cantrips | --- Spell Slots Per Spell Level ---|||||||||
|
56 |
+
| ^| Bonus ^| ^| Known ^|1st |2nd |3rd |4th |5th |6th |7th |8th |9th |
|
57 |
+
|:-----:|:-----------:|:-------------|:--------:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|
58 |
+
| 1st | +2 | ${_.sample(features)} | 2 | 2 | — | — | — | — | — | — | — | — |
|
59 |
+
| 2nd | +2 | ${_.sample(features)} | 2 | 3 | — | — | — | — | — | — | — | — |
|
60 |
+
| 3rd | +2 | ${_.sample(features)} | 2 | 4 | 2 | — | — | — | — | — | — | — |
|
61 |
+
| 4th | +2 | ${_.sample(features)} | 3 | 4 | 3 | — | — | — | — | — | — | — |
|
62 |
+
| 5th | +3 | ${_.sample(features)} | 3 | 4 | 3 | 2 | — | — | — | — | — | — |
|
63 |
+
| 6th | +3 | ${_.sample(features)} | 3 | 4 | 3 | 3 | — | — | — | — | — | — |
|
64 |
+
| 7th | +3 | ${_.sample(features)} | 3 | 4 | 3 | 3 | 1 | — | — | — | — | — |
|
65 |
+
| 8th | +3 | ${_.sample(features)} | 3 | 4 | 3 | 3 | 2 | — | — | — | — | — |
|
66 |
+
| 9th | +4 | ${_.sample(features)} | 3 | 4 | 3 | 3 | 2 | 1 | — | — | — | — |
|
67 |
+
| 10th | +4 | ${_.sample(features)} | 3 | 4 | 3 | 3 | 2 | 1 | — | — | — | — |
|
68 |
+
| 11th | +4 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 2 | 1 | 1 | — | — | — |
|
69 |
+
| 12th | +4 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 2 | 1 | 1 | — | — | — |
|
70 |
+
| 13th | +5 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 2 | 1 | 1 | 1 | — | — |
|
71 |
+
| 14th | +5 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 2 | 1 | 1 | 1 | — | — |
|
72 |
+
| 15th | +5 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 2 | 1 | 1 | 1 | 1 | — |
|
73 |
+
| 16th | +5 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 2 | 1 | 1 | 1 | 1 | — |
|
74 |
+
| 17th | +6 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 2 | 1 | 1 | 1 | 1 | 1 |
|
75 |
+
| 18th | +6 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 3 | 1 | 1 | 1 | 1 | 1 |
|
76 |
+
| 19th | +6 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 3 | 2 | 2 | 1 | 1 | 1 |
|
77 |
+
| 20th | +6 | ${_.sample(features)} | 4 | 4 | 3 | 3 | 3 | 2 | 2 | 2 | 1 | 1 |
|
78 |
+
}}\n\n`;
|
79 |
+
},
|
80 |
+
|
81 |
+
half : function(snippetClasses){
|
82 |
+
return dedent`
|
83 |
+
{{${snippetClasses}
|
84 |
+
##### The ${_.sample(classnames)}
|
85 |
+
| Level | Proficiency | Features | Spells |--- Spell Slots Per Spell Level ---|||||
|
86 |
+
| ^| Bonus ^| ^| Known ^| 1st | 2nd | 3rd | 4th | 5th |
|
87 |
+
|:-----:|:-----------:|:-------------|:------:|:-----:|:-----:|:-----:|:-----:|:-----:|
|
88 |
+
| 1st | +2 | ${_.sample(features)} | — | — | — | — | — | — |
|
89 |
+
| 2nd | +2 | ${_.sample(features)} | 2 | 2 | — | — | — | — |
|
90 |
+
| 3rd | +2 | ${_.sample(features)} | 3 | 3 | — | — | — | — |
|
91 |
+
| 4th | +2 | ${_.sample(features)} | 3 | 3 | — | — | — | — |
|
92 |
+
| 5th | +3 | ${_.sample(features)} | 4 | 4 | 2 | — | — | — |
|
93 |
+
| 6th | +3 | ${_.sample(features)} | 4 | 4 | 2 | — | — | — |
|
94 |
+
| 7th | +3 | ${_.sample(features)} | 5 | 4 | 3 | — | — | — |
|
95 |
+
| 8th | +3 | ${_.sample(features)} | 5 | 4 | 3 | — | — | — |
|
96 |
+
| 9th | +4 | ${_.sample(features)} | 6 | 4 | 3 | 2 | — | — |
|
97 |
+
| 10th | +4 | ${_.sample(features)} | 6 | 4 | 3 | 2 | — | — |
|
98 |
+
| 11th | +4 | ${_.sample(features)} | 7 | 4 | 3 | 3 | — | — |
|
99 |
+
| 12th | +4 | ${_.sample(features)} | 7 | 4 | 3 | 3 | — | — |
|
100 |
+
| 13th | +5 | ${_.sample(features)} | 8 | 4 | 3 | 3 | 1 | — |
|
101 |
+
| 14th | +5 | ${_.sample(features)} | 8 | 4 | 3 | 3 | 1 | — |
|
102 |
+
| 15th | +5 | ${_.sample(features)} | 9 | 4 | 3 | 3 | 2 | — |
|
103 |
+
| 16th | +5 | ${_.sample(features)} | 9 | 4 | 3 | 3 | 2 | — |
|
104 |
+
| 17th | +6 | ${_.sample(features)} | 10 | 4 | 3 | 3 | 3 | 1 |
|
105 |
+
| 18th | +6 | ${_.sample(features)} | 10 | 4 | 3 | 3 | 3 | 1 |
|
106 |
+
| 19th | +6 | ${_.sample(features)} | 11 | 4 | 3 | 3 | 3 | 2 |
|
107 |
+
| 20th | +6 | ${_.sample(features)} | 11 | 4 | 3 | 3 | 3 | 2 |
|
108 |
+
}}\n\n`;
|
109 |
+
},
|
110 |
+
|
111 |
+
third : function(snippetClasses){
|
112 |
+
return dedent`
|
113 |
+
{{${snippetClasses}
|
114 |
+
##### ${_.sample(classnames)} Spellcasting
|
115 |
+
| Level | Cantrips | Spells |--- Spells Slots per Spell Level ---||||
|
116 |
+
| ^| Known ^| Known ^| 1st | 2nd | 3rd | 4th |
|
117 |
+
|:-----:|:--------:|:------:|:-------:|:-------:|:-------:|:-------:|
|
118 |
+
| 3rd | 2 | 3 | 2 | — | — | — |
|
119 |
+
| 4th | 2 | 4 | 3 | — | — | — |
|
120 |
+
| 5th | 2 | 4 | 3 | — | — | — |
|
121 |
+
| 6th | 2 | 4 | 3 | — | — | — |
|
122 |
+
| 7th | 2 | 5 | 4 | 2 | — | — |
|
123 |
+
| 8th | 2 | 6 | 4 | 2 | — | — |
|
124 |
+
| 9th | 2 | 6 | 4 | 2 | — | — |
|
125 |
+
| 10th | 3 | 7 | 4 | 3 | — | — |
|
126 |
+
| 11th | 3 | 8 | 4 | 3 | — | — |
|
127 |
+
| 12th | 3 | 8 | 4 | 3 | — | — |
|
128 |
+
| 13th | 3 | 9 | 4 | 3 | 2 | — |
|
129 |
+
| 14th | 3 | 10 | 4 | 3 | 2 | — |
|
130 |
+
| 15th | 3 | 10 | 4 | 3 | 2 | — |
|
131 |
+
| 16th | 3 | 11 | 4 | 3 | 3 | — |
|
132 |
+
| 17th | 3 | 11 | 4 | 3 | 3 | — |
|
133 |
+
| 18th | 3 | 11 | 4 | 3 | 3 | — |
|
134 |
+
| 19th | 3 | 12 | 4 | 3 | 3 | 1 |
|
135 |
+
| 20th | 3 | 13 | 4 | 3 | 3 | 1 |
|
136 |
+
}}\n\n`;
|
137 |
+
}
|
138 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/coverpage.gen.js
ADDED
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
const dedent = require('dedent-tabs').default;
|
3 |
+
|
4 |
+
const titles = [
|
5 |
+
'The Burning Gallows', 'The Ring of Nenlast',
|
6 |
+
'Below the Blind Tavern', 'Below the Hungering River',
|
7 |
+
'Before Bahamut\'s Land', 'The Cruel Grave from Within',
|
8 |
+
'The Strength of Trade Road', 'Through The Raven Queen\'s Worlds',
|
9 |
+
'Within the Settlement', 'The Crown from Within',
|
10 |
+
'The Merchant Within the Battlefield', 'Ioun\'s Fading Traveler',
|
11 |
+
'The Legion Ingredient', 'The Explorer Lure',
|
12 |
+
'Before the Charming Badlands', 'Vecna\'s Hidden Sage',
|
13 |
+
'The Living Dead Above the Fearful Cage', 'Bahamut\'s Demonspawn',
|
14 |
+
'Across Gruumsh\'s Elemental Chaos', 'The Blade of Orcus',
|
15 |
+
'Beyond Revenge', 'Brain of Insanity',
|
16 |
+
'A New Beginning', 'Evil Lake of the Merfolk',
|
17 |
+
'Invasion of the Gigantic Cat, Part II', 'Kraken War 2020',
|
18 |
+
'The Body Whisperers', 'The Doctor from Heaven',
|
19 |
+
'The Diabolical Tales of the Ape-Women', 'The Doctor Immortal',
|
20 |
+
'Core of Heaven: Guardian of Amazement', 'The Graveyard',
|
21 |
+
'Guardian: Skies of the Dark Wizard', 'Lute of Eternity',
|
22 |
+
'Mercury\'s Planet: Brave Evolution', 'Azure Core',
|
23 |
+
'Sky of Zelda: The Thunder of Force', 'Core Battle',
|
24 |
+
'Ruby of Atlantis: The Quake of Peace', 'Deadly Amazement III',
|
25 |
+
'Dry Chaos IX', 'Gate Thunder',
|
26 |
+
'Vyse\'s Skies', 'Blue Greatness III',
|
27 |
+
'Yellow Divinity', 'Zidane\'s Ghost'
|
28 |
+
];
|
29 |
+
|
30 |
+
const subtitles = [
|
31 |
+
'Tomb of Shadows', 'Dragon\'s Lair',
|
32 |
+
'Lost Caverns', 'The Necromancer',
|
33 |
+
'Mystic Forest', 'Cursed Ruins',
|
34 |
+
'The Dark Abyss', 'Enchanted Maze',
|
35 |
+
'Haunted Castle', 'Sands of Fate',
|
36 |
+
'Dragon\'s Hoard', 'Undead Menace',
|
37 |
+
'Lost City Ruins', 'Goblin Ambush',
|
38 |
+
'Enchanted Forest', 'Darkness Rising',
|
39 |
+
'Quest for Glory', 'Ancient Prophecy',
|
40 |
+
'Shadowy Depths', 'Mystic Isles'
|
41 |
+
];
|
42 |
+
|
43 |
+
const footnote = [
|
44 |
+
'In an ominous universe, a botanist opposes terrorism.',
|
45 |
+
'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.',
|
46 |
+
'In a land of corruption, two cyberneticists and a dungeon delver search for freedom.',
|
47 |
+
'In an evil empire of horror, two rangers battle the forces of hell.',
|
48 |
+
'In a lost city, in an age of sorcery, a librarian quests for revenge.',
|
49 |
+
'In a universe of illusions and danger, three time travellers and an adventurer search for justice.',
|
50 |
+
'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.',
|
51 |
+
'In a universe of demons, in an era of insanity and ghosts, three bodyguards and a bodyguard try to find vengance.',
|
52 |
+
'In a kingdom of corruption and battle, seven artificial intelligences try to save the last living fertile woman.',
|
53 |
+
'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.',
|
54 |
+
'In a crime-infested kingdom, three martial artists quest for the truth and oppose evil.',
|
55 |
+
'In a terrifying universe of lost souls, in an era of lost souls, eight dancers fight evil.',
|
56 |
+
'In a galaxy of confusion and insanity, three martial artists and a duke battle a mob of psychics.',
|
57 |
+
'In an amazing kingdom, a wizard and a secretary hope to prevent the destruction of mankind.',
|
58 |
+
'In a kingdom of deception, a reporter searches for fame.',
|
59 |
+
'In a hellish empire, a swordswoman and a duke try to find the ultimate weapon and battle a conspiracy.',
|
60 |
+
'In an evil galaxy of illusion, in a time of technology and misery, seven psychiatrists battle crime.',
|
61 |
+
'In a dark city of confusion, three swordswomen and a singer battle lawlessness.',
|
62 |
+
'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.',
|
63 |
+
'In a kingdom of panic, six adventurers oppose lawlessness.',
|
64 |
+
'In a land of dreams and hopelessness, three hackers and a cyborg search for justice.',
|
65 |
+
'On a planet of mysticism, three travelers and a fire fighter quest for the ultimate weapon and oppose evil.',
|
66 |
+
'In a wicked universe, five seers fight lawlessness.',
|
67 |
+
'In a kingdom of death, in an era of illusion and blood, four colonists search for fame.',
|
68 |
+
'In an amazing kingdom, in an age of sorcery and lost souls, eight space pirates quest for freedom.'
|
69 |
+
];
|
70 |
+
|
71 |
+
const coverText = [
|
72 |
+
'Embark on a thrilling journey across a vast and varied world, where magic and mystery await you at every turn. Encounter strange creatures and ancient secrets, and forge your own destiny with your choices. The world is yours to shape and explore.',
|
73 |
+
'Join a band of brave adventurers and set out to explore the unknown lands beyond the horizon. Along the way, you’ll face perilous challenges, make new friends and enemies, and uncover a plot that threatens to destroy everything you hold dear. The fate of the world rests in your hands.',
|
74 |
+
'Create your own character and enter a realm of endless possibilities, where you can be whoever you want to be. Whether you prefer to fight, sneak, charm, or craft your way through the game, you’ll find a style that suits you. The only limit is your imagination.',
|
75 |
+
'Experience a rich and immersive story that adapts to your actions and decisions. Every choice you make has consequences, for good or ill. Will you be a hero or a villain? A leader or a follower? A friend or a foe? The choice is yours.',
|
76 |
+
'Dive into a world of epic fantasy and adventure, where you can explore ancient civilizations, dark dungeons, and hidden secrets. Along the way, you’ll meet colorful characters, collect powerful items, and learn new skills. The more you play, the more you’ll discover.',
|
77 |
+
'Explore a vast and dynamic world that changes according to your actions. You can shape the environment, influence the politics, and alter the history of the game world. But be careful, as every change has a ripple effect that may have unforeseen consequences.',
|
78 |
+
'Enter a world of wonder and danger, where you can find allies and enemies among the various races and factions that inhabit it. You can choose to join or oppose any of them, or forge your own path. The game world is alive and responsive to your actions.'
|
79 |
+
];
|
80 |
+
|
81 |
+
module.exports = {
|
82 |
+
|
83 |
+
front : function() {
|
84 |
+
return dedent`
|
85 |
+
{{frontCover}}
|
86 |
+
|
87 |
+
{{logo ![](/assets/naturalCritLogoRed.svg)}}
|
88 |
+
|
89 |
+
# ${_.sample(titles)}
|
90 |
+
## ${_.sample(subtitles)}
|
91 |
+
___
|
92 |
+
|
93 |
+
{{banner HOMEBREW}}
|
94 |
+
|
95 |
+
{{footnote
|
96 |
+
${_.sample(footnote)}
|
97 |
+
}}
|
98 |
+
|
99 |
+
![background image](https://i.imgur.com/IwHRrbF.jpg){position:absolute,bottom:0,left:0,height:100%}
|
100 |
+
|
101 |
+
\page`;
|
102 |
+
},
|
103 |
+
|
104 |
+
inside : function() {
|
105 |
+
return dedent`
|
106 |
+
{{insideCover}}
|
107 |
+
|
108 |
+
# ${_.sample(titles)}
|
109 |
+
## ${_.sample(subtitles)}
|
110 |
+
___
|
111 |
+
|
112 |
+
{{imageMaskCenter${_.random(1, 16)},--offsetX:0%,--offsetY:0%,--rotation:0
|
113 |
+
![background image](https://i.imgur.com/IsfUnFR.jpg){position:absolute,bottom:0,left:0,height:100%}
|
114 |
+
}}
|
115 |
+
|
116 |
+
{{logo ![](/assets/naturalCritLogoRed.svg)}}
|
117 |
+
|
118 |
+
\page`;
|
119 |
+
},
|
120 |
+
|
121 |
+
part : function() {
|
122 |
+
return dedent`
|
123 |
+
{{partCover}}
|
124 |
+
|
125 |
+
# PART X
|
126 |
+
## ${_.sample(subtitles)}
|
127 |
+
|
128 |
+
{{imageMaskEdge${_.random(1, 8)},--offset:10cm,--rotation:180
|
129 |
+
![Background image](https://i.imgur.com/9TU96xY.jpg){position:absolute,bottom:0,left:0,height:100%}
|
130 |
+
}}
|
131 |
+
|
132 |
+
\page`;
|
133 |
+
},
|
134 |
+
|
135 |
+
back : function() {
|
136 |
+
return dedent`
|
137 |
+
{{backCover}}
|
138 |
+
|
139 |
+
# ${_.sample(subtitles)}
|
140 |
+
|
141 |
+
${_.sampleSize(coverText, 3).join('\n:\n')}
|
142 |
+
___
|
143 |
+
|
144 |
+
For use with any fantasy roleplaying ruleset. Play the best game of your life!
|
145 |
+
|
146 |
+
![background image](https://i.imgur.com/MJ4YHu7.jpg){position:absolute,bottom:0,left:0,height:100%}
|
147 |
+
|
148 |
+
{{logo
|
149 |
+
![](/assets/naturalCritLogoWhite.svg)
|
150 |
+
|
151 |
+
Homebrewery.Naturalcrit.com
|
152 |
+
}}
|
153 |
+
|
154 |
+
\page`;
|
155 |
+
}
|
156 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/fullclass.gen.js
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const ClassFeatureGen = require('./classfeature.gen.js');
|
4 |
+
|
5 |
+
const ClassTableGen = require('./classtable.gen.js');
|
6 |
+
|
7 |
+
module.exports = function(){
|
8 |
+
|
9 |
+
const classname = _.sample(['Archivist', 'Fancyman', 'Linguist', 'Fletcher',
|
10 |
+
'Notary', 'Berserker-Typist', 'Fishmongerer', 'Manicurist', 'Haberdasher', 'Concierge']);
|
11 |
+
|
12 |
+
|
13 |
+
const image = _.sample(_.map([
|
14 |
+
'http://orig01.deviantart.net/4682/f/2007/099/f/c/bard_stick_figure_by_wrpigeek.png',
|
15 |
+
'http://img07.deviantart.net/a3c9/i/2007/099/3/a/archer_stick_figure_by_wrpigeek.png',
|
16 |
+
'http://pre04.deviantart.net/d596/th/pre/f/2007/099/5/2/adventurer_stick_figure_by_wrpigeek.png',
|
17 |
+
'http://img13.deviantart.net/d501/i/2007/099/d/4/black_mage_stick_figure_by_wrpigeek.png',
|
18 |
+
'http://img09.deviantart.net/5cf3/i/2007/099/d/d/dark_knight_stick_figure_by_wrpigeek.png',
|
19 |
+
'http://pre01.deviantart.net/7a34/th/pre/f/2007/099/6/3/monk_stick_figure_by_wrpigeek.png',
|
20 |
+
'http://img11.deviantart.net/5dcc/i/2007/099/d/1/mystic_knight_stick_figure_by_wrpigeek.png',
|
21 |
+
'http://pre08.deviantart.net/ad45/th/pre/f/2007/099/a/0/thief_stick_figure_by_wrpigeek.png',
|
22 |
+
], function(url){
|
23 |
+
return `<img src = '${url}' style='max-width:8cm;max-height:25cm' />`;
|
24 |
+
}));
|
25 |
+
|
26 |
+
|
27 |
+
return `${[
|
28 |
+
image,
|
29 |
+
'',
|
30 |
+
'```',
|
31 |
+
'```',
|
32 |
+
'<div style=\'margin-top:240px\'></div>\n\n',
|
33 |
+
`## ${classname}`,
|
34 |
+
'Cool intro stuff will go here',
|
35 |
+
|
36 |
+
'\\page',
|
37 |
+
ClassTableGen(classname),
|
38 |
+
ClassFeatureGen(classname),
|
39 |
+
|
40 |
+
|
41 |
+
|
42 |
+
].join('\n')}\n\n\n`;
|
43 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/index.gen.js
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const dedent = require('dedent-tabs').default;
|
2 |
+
|
3 |
+
module.exports = ()=>{
|
4 |
+
return dedent`
|
5 |
+
{{index,wide,columns:5;
|
6 |
+
##### Index
|
7 |
+
- Ankhesh-Bort
|
8 |
+
- city map, 7
|
9 |
+
- city watch, 12
|
10 |
+
- guilds, 19
|
11 |
+
- Cheese
|
12 |
+
- types of cheese, 8
|
13 |
+
- cheese-related magic, 14
|
14 |
+
- cheese-related quests, 26-27
|
15 |
+
- Death
|
16 |
+
- appearance, 10
|
17 |
+
- personality, 13
|
18 |
+
- hobbies, 23
|
19 |
+
- Elves
|
20 |
+
- types of elves, 15
|
21 |
+
- elvish magic, 24
|
22 |
+
- elvish curses, 28
|
23 |
+
- Footnotes
|
24 |
+
- types of footnotes, 16-17
|
25 |
+
- footnote rules, 20-21
|
26 |
+
- footnote humor, 29-30
|
27 |
+
- Gods
|
28 |
+
- types of gods, 12
|
29 |
+
- godly interventions, 25
|
30 |
+
- godly conflicts, 31
|
31 |
+
- Heroes
|
32 |
+
- class features, 11-12
|
33 |
+
- heroic deeds, 26-27
|
34 |
+
- Inns
|
35 |
+
- types of inns, 9
|
36 |
+
- inn amenities, 18
|
37 |
+
- Jokes
|
38 |
+
- types of jokes, 11-12
|
39 |
+
- joke delivery, 25
|
40 |
+
- Knives
|
41 |
+
- types of knives, 16-17
|
42 |
+
- knife skills, 22-23
|
43 |
+
- knife fights, 28-29
|
44 |
+
- Luggage
|
45 |
+
- appearance, 10
|
46 |
+
- personality, 13
|
47 |
+
- abilities, 23
|
48 |
+
- Magic
|
49 |
+
- types of magic, 15
|
50 |
+
- magic rules, 24
|
51 |
+
- magic mishaps, 28
|
52 |
+
- Socks
|
53 |
+
- types of socks, 9
|
54 |
+
- sock-related magic (yes, really), 15
|
55 |
+
- sock-related quests (no, really), 26
|
56 |
+
- Trolls
|
57 |
+
- appearance and biology, 11
|
58 |
+
- culture and language, 18
|
59 |
+
- troll rights and activism, 31
|
60 |
+
- Unknown University
|
61 |
+
- history and architecture, 12
|
62 |
+
- faculty and staff, 20
|
63 |
+
- courses and exams, 33
|
64 |
+
- Vampires
|
65 |
+
- types and origins, 13
|
66 |
+
- vampiric powers and weaknesses, 21
|
67 |
+
- vampiric etiquette and politics, 34
|
68 |
+
- Witches
|
69 |
+
- types and traditions, 14
|
70 |
+
- witchcraft and headology, 22
|
71 |
+
- witch trials and tribulations, 35
|
72 |
+
- Xylophones
|
73 |
+
- musical instruments or weapons?, 15
|
74 |
+
- xylophone-related magic and lore, 23
|
75 |
+
- xylophone-related quests and puzzles, 36
|
76 |
+
- Yetis
|
77 |
+
- appearance and behavior, 16
|
78 |
+
- yeti philosophy and religion, 24
|
79 |
+
- yeti encounters and stories, 37
|
80 |
+
- Zombies
|
81 |
+
- types and causes, 17
|
82 |
+
- zombie rights and duties, 25
|
83 |
+
- zombie survival and prevention, 38
|
84 |
+
}}`;
|
85 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/magic.gen.js
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
const spellNames = [
|
4 |
+
'Astral Rite of Acne',
|
5 |
+
'Create Acne',
|
6 |
+
'Cursed Ramen Erruption',
|
7 |
+
'Dark Chant of the Dentists',
|
8 |
+
'Erruption of Immaturity',
|
9 |
+
'Flaming Disc of Inconvenience',
|
10 |
+
'Heal Bad Hygene',
|
11 |
+
'Heavenly Transfiguration of the Cream Devil',
|
12 |
+
'Hellish Cage of Mucus',
|
13 |
+
'Irritate Peanut Butter Fairy',
|
14 |
+
'Luminous Erruption of Tea',
|
15 |
+
'Mystic Spell of the Poser',
|
16 |
+
'Sorcerous Enchantment of the Chimneysweep',
|
17 |
+
'Steak Sauce Ray',
|
18 |
+
'Talk to Groupie',
|
19 |
+
'Astonishing Chant of Chocolate',
|
20 |
+
'Astounding Pasta Puddle',
|
21 |
+
'Ball of Annoyance',
|
22 |
+
'Cage of Yarn',
|
23 |
+
'Control Noodles Elemental',
|
24 |
+
'Create Nervousness',
|
25 |
+
'Cure Baldness',
|
26 |
+
'Cursed Ritual of Bad Hair',
|
27 |
+
'Dispell Piles in Dentist',
|
28 |
+
'Eliminate Florists',
|
29 |
+
'Illusionary Transfiguration of the Babysitter',
|
30 |
+
'Necromantic Armor of Salad Dressing',
|
31 |
+
'Occult Transfiguration of Foot Fetish',
|
32 |
+
'Protection from Mucus Giant',
|
33 |
+
'Tinsel Blast',
|
34 |
+
'Alchemical Evocation of the Goths',
|
35 |
+
'Call Fangirl',
|
36 |
+
'Divine Spell of Crossdressing',
|
37 |
+
'Dominate Ramen Giant',
|
38 |
+
'Eliminate Vindictiveness in Gym Teacher',
|
39 |
+
'Extra-Planar Spell of Irritation',
|
40 |
+
'Induce Whining in Babysitter',
|
41 |
+
'Invoke Complaining',
|
42 |
+
'Magical Enchantment of Arrogance',
|
43 |
+
'Occult Globe of Salad Dressing',
|
44 |
+
'Overwhelming Enchantment of the Chocolate Fairy',
|
45 |
+
'Sorcerous Dandruff Globe',
|
46 |
+
'Spiritual Invocation of the Costumers',
|
47 |
+
'Ultimate Rite of the Confetti Angel',
|
48 |
+
'Ultimate Ritual of Mouthwash',
|
49 |
+
];
|
50 |
+
const itemNames = [
|
51 |
+
'Doorknob of Niceness',
|
52 |
+
'Paper Armor of Folding',
|
53 |
+
'Mixtape of Sadness',
|
54 |
+
'Staff of Endless Confetti',
|
55 |
+
];
|
56 |
+
|
57 |
+
module.exports = {
|
58 |
+
|
59 |
+
spellList : function(){
|
60 |
+
const levels = ['Cantrips (0 Level)', '1st Level', '2nd Level', '3rd Level', '4th Level', '5th Level', '6th Level', '7th Level', '8th Level', '9th Level'];
|
61 |
+
|
62 |
+
const content = _.map(levels, (level)=>{
|
63 |
+
const spells = _.map(_.sampleSize(spellNames, _.random(4, 10)), (spell)=>{
|
64 |
+
return `- ${spell}`;
|
65 |
+
}).join('\n');
|
66 |
+
return `##### ${level} \n${spells} \n`;
|
67 |
+
}).join('\n');
|
68 |
+
|
69 |
+
return `{{spellList,wide\n${content}\n}}`;
|
70 |
+
},
|
71 |
+
|
72 |
+
spell : function(){
|
73 |
+
const level = ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th'];
|
74 |
+
const spellSchools = ['abjuration', 'conjuration', 'divination', 'enchantment', 'evocation', 'illusion', 'necromancy', 'transmutation'];
|
75 |
+
|
76 |
+
|
77 |
+
let components = _.sampleSize(['V', 'S', 'M'], _.random(1, 3)).join(', ');
|
78 |
+
if(components.indexOf('M') !== -1){
|
79 |
+
components += ` (${_.sampleSize(['a small doll', 'a crushed button worth at least 1cp', 'discarded gum wrapper'], _.random(1, 3)).join(', ')})`;
|
80 |
+
}
|
81 |
+
|
82 |
+
return [
|
83 |
+
`#### ${_.sample(spellNames)}`,
|
84 |
+
`*${_.sample(level)}-level ${_.sample(spellSchools)}*`,
|
85 |
+
'',
|
86 |
+
'**Casting Time:** :: 1 action',
|
87 |
+
`**Range:** :: ${_.sample(['Self', 'Touch', '30 feet', '60 feet'])}`,
|
88 |
+
`**Components:** :: ${components}`,
|
89 |
+
`**Duration:** :: ${_.sample(['Until dispelled', '1 round', 'Instantaneous', 'Concentration, up to 10 minutes', '1 hour'])}`,
|
90 |
+
'',
|
91 |
+
'A flame, equivalent in brightness to a torch, springs from an object that you touch. ',
|
92 |
+
'The effect look like a regular flame, but it creates no heat and doesn\'t use oxygen. ',
|
93 |
+
'A *continual flame* can be covered or hidden but not smothered or quenched.',
|
94 |
+
'\n\n\n'
|
95 |
+
].join('\n');
|
96 |
+
},
|
97 |
+
|
98 |
+
item : function() {
|
99 |
+
return [
|
100 |
+
`#### ${_.sample(itemNames)}`,
|
101 |
+
`*${_.sample(['Wondrous item', 'Armor', 'Weapon'])}, ${_.sample(['Common', 'Uncommon', 'Rare', 'Very Rare', 'Legendary', 'Artifact'])} (requires attunement)*`,
|
102 |
+
`:`,
|
103 |
+
`This knob is pretty nice. When attached to a door, it allows a user to`,
|
104 |
+
`open that door with the strength of the nearest animal. For example, if`,
|
105 |
+
`there is a cow nearby, the user will have the "strength of a cow" while`,
|
106 |
+
`opening this door.`
|
107 |
+
].join('\n');
|
108 |
+
}
|
109 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/monsterblock.gen.js
ADDED
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
const dedent = require('dedent-tabs').default;
|
3 |
+
|
4 |
+
const genList = function(list, max){
|
5 |
+
return _.sampleSize(list, _.random(0, max)).join(', ') || 'None';
|
6 |
+
};
|
7 |
+
|
8 |
+
const getMonsterName = function(){
|
9 |
+
return _.sample([
|
10 |
+
'All-devouring Baseball Imp',
|
11 |
+
'All-devouring Gumdrop Wraith',
|
12 |
+
'Chocolate Hydra',
|
13 |
+
'Devouring Peacock',
|
14 |
+
'Economy-sized Colossus of the Lemonade Stand',
|
15 |
+
'Ghost Pigeon',
|
16 |
+
'Gibbering Duck',
|
17 |
+
'Sparklemuffin Peacock Spider',
|
18 |
+
'Gum Elemental',
|
19 |
+
'Illiterate Construct of the Candy Store',
|
20 |
+
'Ineffable Chihuahua',
|
21 |
+
'Irritating Death Hamster',
|
22 |
+
'Irritating Gold Mouse',
|
23 |
+
'Juggernaut Snail',
|
24 |
+
'Juggernaut of the Sock Drawer',
|
25 |
+
'Koala of the Cosmos',
|
26 |
+
'Mad Koala of the West',
|
27 |
+
'Milk Djinni of the Lemonade Stand',
|
28 |
+
'Mind Ferret',
|
29 |
+
'Mystic Salt Spider',
|
30 |
+
'Necrotic Halitosis Angel',
|
31 |
+
'Pinstriped Famine Sheep',
|
32 |
+
'Ritalin Leech',
|
33 |
+
'Shocker Kangaroo',
|
34 |
+
'Stellar Tennis Juggernaut',
|
35 |
+
'Wailing Quail of the Sun',
|
36 |
+
'Angel Pigeon',
|
37 |
+
'Anime Sphinx',
|
38 |
+
'Bored Avalanche Sheep of the Wasteland',
|
39 |
+
'Devouring Nougat Sphinx of the Sock Drawer',
|
40 |
+
'Djinni of the Footlocker',
|
41 |
+
'Ectoplasmic Jazz Devil',
|
42 |
+
'Flatuent Angel',
|
43 |
+
'Gelatinous Duck of the Dream-Lands',
|
44 |
+
'Gelatinous Mouse',
|
45 |
+
'Golem of the Footlocker',
|
46 |
+
'Lich Wombat',
|
47 |
+
'Mechanical Sloth of the Past',
|
48 |
+
'Milkshake Succubus',
|
49 |
+
'Puffy Bone Peacock of the East',
|
50 |
+
'Rainbow Manatee',
|
51 |
+
'Rune Parrot',
|
52 |
+
'Sand Cow',
|
53 |
+
'Sinister Vanilla Dragon',
|
54 |
+
'Snail of the North',
|
55 |
+
'Spider of the Sewer',
|
56 |
+
'Stellar Sawdust Leech',
|
57 |
+
'Storm Anteater of Hell',
|
58 |
+
'Stupid Spirit of the Brewery',
|
59 |
+
'Time Kangaroo',
|
60 |
+
'Tomb Poodle',
|
61 |
+
]);
|
62 |
+
};
|
63 |
+
|
64 |
+
const getType = function(){
|
65 |
+
return `${_.sample(['Tiny', 'Small', 'Medium', 'Large', 'Gargantuan', 'Stupidly vast'])} ${_.sample(['beast', 'fiend', 'annoyance', 'guy', 'cutie'])}`;
|
66 |
+
};
|
67 |
+
|
68 |
+
const getAlignment = function(){
|
69 |
+
return _.sample([
|
70 |
+
'annoying evil',
|
71 |
+
'chaotic gossipy',
|
72 |
+
'chaotic sloppy',
|
73 |
+
'depressed neutral',
|
74 |
+
'lawful bogus',
|
75 |
+
'lawful coy',
|
76 |
+
'manic-depressive evil',
|
77 |
+
'narrow-minded neutral',
|
78 |
+
'neutral annoying',
|
79 |
+
'neutral ignorant',
|
80 |
+
'oedpipal neutral',
|
81 |
+
'silly neutral',
|
82 |
+
'unoriginal neutral',
|
83 |
+
'weird neutral',
|
84 |
+
'wordy evil',
|
85 |
+
'unaligned'
|
86 |
+
]);
|
87 |
+
};
|
88 |
+
|
89 |
+
const getStats = function(){
|
90 |
+
return `|${_.times(6, function(){
|
91 |
+
const num = _.random(1, 20);
|
92 |
+
const mod = Math.ceil(num/2 - 5);
|
93 |
+
return `${num} (${mod >= 0 ? `+${mod}` : mod})`;
|
94 |
+
}).join('|')}|`;
|
95 |
+
};
|
96 |
+
|
97 |
+
const genAbilities = function(){
|
98 |
+
return _.sample([
|
99 |
+
'***Pack Tactics.*** These guys work together like peanut butter and jelly.',
|
100 |
+
'***Fowl Appearance.*** While the creature remains motionless, it is indistinguishable from a normal chicken.',
|
101 |
+
'***Onion Stench.*** Any creatures within 5 feet of this thing develops an irrational craving for onion rings.',
|
102 |
+
'***Enormous Nose.*** This creature gains advantage on any check involving putting things in its nose.',
|
103 |
+
'***Sassiness.*** When questioned, this creature will talk back instead of answering.',
|
104 |
+
'***Big Jerk.*** Whenever this creature makes an attack, it starts telling you how much cooler it is than you.',
|
105 |
+
]);
|
106 |
+
};
|
107 |
+
|
108 |
+
const genLongAbilities = function(){
|
109 |
+
return _.sample([
|
110 |
+
dedent`***Pack Tactics.*** These guys work together like peanut butter and jelly. Jelly and peanut butter.
|
111 |
+
|
112 |
+
When one of these guys attacks, the target is covered with, well, peanut butter and jelly.`,
|
113 |
+
dedent`***Hangriness.*** This creature is angry, and hungry. It will refuse to do anything with you until its hunger is satisfied.
|
114 |
+
|
115 |
+
When in visual contact with this creature, you must purchase an extra order of fries, even if they say they aren't hungry.`,
|
116 |
+
dedent`***Full of Detergent.*** This creature has swallowed an entire bottle of dish detergent and is actually having a pretty good time.
|
117 |
+
|
118 |
+
While walking near this creature, you must make a dexterity check or become "a soapy mess" for three hours, after which your skin will get all dry and itchy.`
|
119 |
+
]);
|
120 |
+
};
|
121 |
+
|
122 |
+
const genAction = function(){
|
123 |
+
const name = _.sample([
|
124 |
+
'Abdominal Drop',
|
125 |
+
'Airplane Hammer',
|
126 |
+
'Atomic Death Throw',
|
127 |
+
'Bulldog Rake',
|
128 |
+
'Corkscrew Strike',
|
129 |
+
'Crossed Splash',
|
130 |
+
'Crossface Suplex',
|
131 |
+
'DDT Powerbomb',
|
132 |
+
'Dual Cobra Wristlock',
|
133 |
+
'Dual Throw',
|
134 |
+
'Elbow Hold',
|
135 |
+
'Gory Body Sweep',
|
136 |
+
'Heel Jawbreaker',
|
137 |
+
'Jumping Driver',
|
138 |
+
'Open Chin Choke',
|
139 |
+
'Scorpion Flurry',
|
140 |
+
'Somersault Stump Fists',
|
141 |
+
'Suffering Wringer',
|
142 |
+
'Super Hip Submission',
|
143 |
+
'Super Spin',
|
144 |
+
'Team Elbow',
|
145 |
+
'Team Foot',
|
146 |
+
'Tilt-a-whirl Chin Sleeper',
|
147 |
+
'Tilt-a-whirl Eye Takedown',
|
148 |
+
'Turnbuckle Roll'
|
149 |
+
]);
|
150 |
+
|
151 |
+
return `***${name}.*** *Melee Weapon Attack:* +4 to hit, reach 5ft., one target. *Hit* 5 (1d6 + 2) `;
|
152 |
+
};
|
153 |
+
|
154 |
+
|
155 |
+
module.exports = {
|
156 |
+
|
157 |
+
monster : function(classes, genLines){
|
158 |
+
return dedent`
|
159 |
+
{{${classes}
|
160 |
+
## ${getMonsterName()}
|
161 |
+
*${getType()}, ${getAlignment()}*
|
162 |
+
___
|
163 |
+
**Armor Class** :: ${_.random(10, 20)} (chain mail, shield)
|
164 |
+
**Hit Points** :: ${_.random(1, 150)}(1d4 + 5)
|
165 |
+
**Speed** :: ${_.random(0, 50)}ft.
|
166 |
+
___
|
167 |
+
| STR | DEX | CON | INT | WIS | CHA |
|
168 |
+
|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
|
169 |
+
${getStats()}
|
170 |
+
___
|
171 |
+
**Condition Immunities** :: ${genList(['groggy', 'swagged', 'weak-kneed', 'buzzed', 'groovy', 'melancholy', 'drunk'], 3)}
|
172 |
+
**Senses** :: darkvision 60 ft., passive Perception ${_.random(3, 20)}
|
173 |
+
**Languages** :: ${genList(['Common', 'Pottymouth', 'Gibberish', 'Latin', 'Jive'], 2)}
|
174 |
+
**Challenge** :: ${_.random(0, 15)} (${_.random(10, 10000)} XP)
|
175 |
+
___
|
176 |
+
${_.times(_.random(genLines, genLines + 2), function(){return genAbilities();}).join('\n:\n')}
|
177 |
+
:
|
178 |
+
${genLongAbilities()}
|
179 |
+
### Actions
|
180 |
+
${_.times(_.random(genLines, genLines + 2), function(){return genAction();}).join('\n:\n')}
|
181 |
+
}}
|
182 |
+
\n`;
|
183 |
+
}
|
184 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/quote.gen.js
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require("lodash");
|
2 |
+
|
3 |
+
const quotes = [
|
4 |
+
"The sword glinted in the dim light, its edges keen and deadly. As the adventurer reached for it, he couldn't help but feel a surge of excitement mixed with fear. This was no ordinary blade.",
|
5 |
+
"The dragon's roar shook the ground beneath their feet, and the brave knight stood tall, his sword at the ready. He knew that this would be the battle of his life, but he was determined to emerge victorious.",
|
6 |
+
"The wizard's laboratory was a sight to behold, filled with bubbling cauldrons, ancient tomes, and strange artifacts from distant lands. As the apprentice gazed around in wonder, she knew that she was about to embark on a journey unlike any other.",
|
7 |
+
"The tavern was packed with rowdy patrons, their voices raised in song and laughter. The bard took center stage, strumming his lute and launching into a tale of adventure and heroism that had the crowd hanging on his every word.",
|
8 |
+
"The thief crept through the shadows, his eyes scanning the room for any sign of danger. He knew that one false move could mean the difference between success and failure, and he was determined to come out on top.",
|
9 |
+
"The elf queen stood atop her castle walls, surveying the kingdom below with a mix of pride and sadness. She knew that the coming war would be brutal, but she was determined to protect her people at all costs.",
|
10 |
+
"The necromancer's tower loomed in the distance, its dark spires piercing the sky. As the adventurers approached, they could feel the chill of death emanating from within",
|
11 |
+
"The ranger moved through the forest like a shadow, his senses attuned to every sound and movement around him. He knew that danger lurked behind every tree, but he was ready for whatever came his way.",
|
12 |
+
"The paladin knelt before the altar, his hands clasped in prayer. He knew that his faith would be tested in the days ahead, but he was ready to face whatever trials lay in store for him.",
|
13 |
+
"The druid communed with the spirits of nature, his mind merging with the trees, the animals, and the very earth itself. He knew that his power came with a great responsibility, and he was determined to use it for the greater good.",
|
14 |
+
];
|
15 |
+
|
16 |
+
const authors = [
|
17 |
+
"Unknown",
|
18 |
+
"James Wyatt",
|
19 |
+
"Eolande Blackwood",
|
20 |
+
"Ragnar Ironheart",
|
21 |
+
"Lyra Nightshade",
|
22 |
+
"Valtorius Darkstar",
|
23 |
+
"Isadora Fireheart",
|
24 |
+
"Theron Shadowbane",
|
25 |
+
"Lirien Starweaver",
|
26 |
+
"Drogathar Bonecrusher",
|
27 |
+
"Kaelen Frostblade",
|
28 |
+
];
|
29 |
+
|
30 |
+
const books = [
|
31 |
+
"The Blade of Destiny",
|
32 |
+
"Dragonfire and Steel",
|
33 |
+
"The Bard's Tale",
|
34 |
+
"Darkness Rising",
|
35 |
+
"The Sacred Quest",
|
36 |
+
"Shadows in the Forest",
|
37 |
+
"The Starweaver Chronicles",
|
38 |
+
"Beneath the Bones",
|
39 |
+
"Moonlit Magic",
|
40 |
+
"Frost and Fury",
|
41 |
+
|
42 |
+
];
|
43 |
+
module.exports = () => {
|
44 |
+
return `
|
45 |
+
{{quote
|
46 |
+
${_.sample(quotes)}
|
47 |
+
|
48 |
+
{{attribution ${_.sample(authors)}, *${_.sample(books)}*}}
|
49 |
+
}}
|
50 |
+
\n`;
|
51 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/script.gen.js
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
const dedent = require('dedent-tabs').default;
|
3 |
+
|
4 |
+
module.exports = {
|
5 |
+
dwarvish : ()=>{
|
6 |
+
return dedent `##### Dwarvish Runes: Sample Alphabet
|
7 |
+
{{runeTable,wide,frame,font-family:Davek
|
8 |
+
| a | b | c | d | e | f | g | h | i | j | k | l | m |
|
9 |
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
10 |
+
| a | b | c | d | e | f | g | h | i | j | k | l | m |
|
11 |
+
:
|
12 |
+
| n | o | p | q | r | s | t | u | v | w | x | y | z |
|
13 |
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
14 |
+
| n | o | p | q | r | s | t | u | v | w | x | y | z |
|
15 |
+
}}\n\n`;
|
16 |
+
},
|
17 |
+
elvish : ()=>{
|
18 |
+
return dedent `##### Elvish Runes: Sample Alphabet
|
19 |
+
{{runeTable,wide,frame,font-family:Rellanic
|
20 |
+
| a | b | c | d | e | f | g | h | i | j | k | l | m |
|
21 |
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
22 |
+
| a | b | c | d | e | f | g | h | i | j | k | l | m |
|
23 |
+
:
|
24 |
+
| n | o | p | q | r | s | t | u | v | w | x | y | z |
|
25 |
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
26 |
+
| n | o | p | q | r | s | t | u | v | w | x | y | z |
|
27 |
+
}}\n\n`;
|
28 |
+
},
|
29 |
+
draconic : ()=>{
|
30 |
+
return dedent `##### Draconic Runes: Sample Alphabet
|
31 |
+
{{runeTable,wide,frame,font-family:Iokharic
|
32 |
+
| a | b | c | d | e | f | g | h | i | j | k | l | m |
|
33 |
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
34 |
+
| a | b | c | d | e | f | g | h | i | j | k | l | m |
|
35 |
+
:
|
36 |
+
| n | o | p | q | r | s | t | u | v | w | x | y | z |
|
37 |
+
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|
38 |
+
| n | o | p | q | r | s | t | u | v | w | x | y | z |
|
39 |
+
}}\n\n`;
|
40 |
+
}
|
41 |
+
|
42 |
+
|
43 |
+
};
|
44 |
+
|
45 |
+
|
46 |
+
()=>{
|
47 |
+
|
48 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/tableOfContents.gen.js
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
const dedent = require('dedent-tabs').default;
|
3 |
+
|
4 |
+
const getTOC = (pages)=>{
|
5 |
+
const add1 = (title, page)=>{
|
6 |
+
res.push({
|
7 |
+
title : title,
|
8 |
+
page : page + 1,
|
9 |
+
children : []
|
10 |
+
});
|
11 |
+
};
|
12 |
+
const add2 = (title, page)=>{
|
13 |
+
if(!_.last(res)) add1(null, page);
|
14 |
+
_.last(res).children.push({
|
15 |
+
title : title,
|
16 |
+
page : page + 1,
|
17 |
+
children : []
|
18 |
+
});
|
19 |
+
};
|
20 |
+
const add3 = (title, page)=>{
|
21 |
+
if(!_.last(res)) add1(null, page);
|
22 |
+
if(!_.last(_.last(res).children)) add2(null, page);
|
23 |
+
_.last(_.last(res).children).children.push({
|
24 |
+
title : title,
|
25 |
+
page : page + 1,
|
26 |
+
children : []
|
27 |
+
});
|
28 |
+
};
|
29 |
+
|
30 |
+
const res = [];
|
31 |
+
_.each(pages, (page, pageNum)=>{
|
32 |
+
if(!page.includes("{{frontCover}}") && !page.includes("{{insideCover}}") && !page.includes("{{partCover}}") && !page.includes("{{backCover}}")) {
|
33 |
+
const lines = page.split('\n');
|
34 |
+
_.each(lines, (line)=>{
|
35 |
+
if(_.startsWith(line, '# ')){
|
36 |
+
const title = line.replace('# ', '');
|
37 |
+
add1(title, pageNum);
|
38 |
+
}
|
39 |
+
if(_.startsWith(line, '## ')){
|
40 |
+
const title = line.replace('## ', '');
|
41 |
+
add2(title, pageNum);
|
42 |
+
}
|
43 |
+
if(_.startsWith(line, '### ')){
|
44 |
+
const title = line.replace('### ', '');
|
45 |
+
add3(title, pageNum);
|
46 |
+
}
|
47 |
+
});
|
48 |
+
}
|
49 |
+
});
|
50 |
+
return res;
|
51 |
+
};
|
52 |
+
|
53 |
+
module.exports = function(props){
|
54 |
+
const pages = props.brew.text.split('\\page');
|
55 |
+
const TOC = getTOC(pages);
|
56 |
+
const markdown = _.reduce(TOC, (r, g1, idx1)=>{
|
57 |
+
if(g1.title !== null) {
|
58 |
+
r.push(`- ### [{{ ${g1.title}}}{{ ${g1.page}}}](#p${g1.page})`);
|
59 |
+
}
|
60 |
+
if(g1.children.length){
|
61 |
+
_.each(g1.children, (g2, idx2)=>{
|
62 |
+
if(g2.title !== null) {
|
63 |
+
r.push(` - #### [{{ ${g2.title}}}{{ ${g2.page}}}](#p${g2.page})`);
|
64 |
+
}
|
65 |
+
if(g2.children.length){
|
66 |
+
_.each(g2.children, (g3, idx3)=>{
|
67 |
+
if(g2.title !== null) {
|
68 |
+
r.push(` - [{{ ${g3.title}}}{{ ${g3.page}}}](#p${g3.page})`);
|
69 |
+
} else { // Don't over-indent if no level-2 parent entry
|
70 |
+
r.push(` - [{{ ${g3.title}}}{{ ${g3.page}}}](#p${g3.page})`);
|
71 |
+
}
|
72 |
+
});
|
73 |
+
}
|
74 |
+
});
|
75 |
+
}
|
76 |
+
return r;
|
77 |
+
}, []).join('\n');
|
78 |
+
|
79 |
+
return dedent`
|
80 |
+
{{toc,wide
|
81 |
+
# Table Of Contents
|
82 |
+
|
83 |
+
${markdown}
|
84 |
+
}}
|
85 |
+
\n`;
|
86 |
+
};
|
dependencies/themes/V3/5ePHB/snippets/watercolor.gen.js
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
module.exports = ()=>{
|
4 |
+
return `{{watercolor${_.random(1, 12)},top:20px,left:30px,width:300px,background-color:#BBAD82,opacity:80%}}\n\n`;
|
5 |
+
};
|
dependencies/themes/V3/5ePHB/style.less
ADDED
@@ -0,0 +1,942 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import (less) './themes/fonts/5e/fonts.less';
|
2 |
+
@import (less) './themes/assets/assets.less';
|
3 |
+
@import (less) './themes/fonts/icon fonts/font-icons.less';
|
4 |
+
|
5 |
+
:root {
|
6 |
+
//Colors
|
7 |
+
--HB_Color_Background : #EEE5CE; // Light parchment
|
8 |
+
--HB_Color_Accent : #E0E5C1; // Pastel green
|
9 |
+
--HB_Color_HeaderUnderline : #C0AD6A; // Gold
|
10 |
+
--HB_Color_HorizontalRule : #9C2B1B; // Maroon
|
11 |
+
--HB_Color_HeaderText : #58180D; // Dark Maroon
|
12 |
+
--HB_Color_MonsterStatBackground : #F2E5B5; // Light orange parchment
|
13 |
+
--HB_Color_CaptionText : #766649; // Brown
|
14 |
+
--HB_Color_WatercolorStain : #BBAD82; // Light brown
|
15 |
+
--HB_Color_Footnotes : #C9AD6A; // Gold
|
16 |
+
}
|
17 |
+
|
18 |
+
.useSansSerif() {
|
19 |
+
font-family : 'ScalySansRemake';
|
20 |
+
font-size : 0.318cm;
|
21 |
+
line-height : 1.2em;
|
22 |
+
p,dl,ul,ol { line-height : 1.2em; }
|
23 |
+
ul, ol { padding-left : 1em; }
|
24 |
+
em { font-style : italic; }
|
25 |
+
strong {
|
26 |
+
font-weight : 800;
|
27 |
+
letter-spacing : -0.02em;
|
28 |
+
}
|
29 |
+
h5 + * { margin-top : 0.1cm; }
|
30 |
+
}
|
31 |
+
.useColumns(@multiplier : 1, @fillMode: auto) {
|
32 |
+
column-count : 2;
|
33 |
+
column-fill : @fillMode;
|
34 |
+
column-gap : 0.9cm;
|
35 |
+
column-width : 8cm * @multiplier;
|
36 |
+
-webkit-column-count : 2;
|
37 |
+
-moz-column-count : 2;
|
38 |
+
-webkit-column-width : 8cm * @multiplier;
|
39 |
+
-moz-column-width : 8cm * @multiplier;
|
40 |
+
-webkit-column-gap : 0.9cm;
|
41 |
+
-moz-column-gap : 0.9cm;
|
42 |
+
}
|
43 |
+
.page {
|
44 |
+
.useColumns();
|
45 |
+
font-family : 'BookInsanityRemake';
|
46 |
+
font-size : 0.34cm;
|
47 |
+
background-image : @backgroundImage;
|
48 |
+
}
|
49 |
+
// *****************************
|
50 |
+
// * BASE
|
51 |
+
// *****************************/
|
52 |
+
|
53 |
+
.page {
|
54 |
+
p {
|
55 |
+
line-height : 1.25em;
|
56 |
+
& + * { margin-top : 0.325cm; } //TODO: MAKE ALL MARGINS TOP-ONLY. USE * + * STYLE SELECTORS
|
57 |
+
& + p { margin-top : 0; }
|
58 |
+
}
|
59 |
+
ul {
|
60 |
+
padding-left : 1.4em;
|
61 |
+
margin-bottom : 0.8em;
|
62 |
+
line-height : 1.25em;
|
63 |
+
}
|
64 |
+
ol {
|
65 |
+
padding-left : 1.4em;
|
66 |
+
margin-bottom : 0.8em;
|
67 |
+
line-height : 1.25em;
|
68 |
+
}
|
69 |
+
//Indents after p or lists
|
70 |
+
p + p, ul + p, ol + p { text-indent : 1em; }
|
71 |
+
img { z-index : -1; }
|
72 |
+
strong {
|
73 |
+
font-weight : bold;
|
74 |
+
letter-spacing : -0.02em;
|
75 |
+
}
|
76 |
+
// *****************************
|
77 |
+
// * HEADERS
|
78 |
+
// *****************************/
|
79 |
+
h1,h2,h3,h4 {
|
80 |
+
font-family : 'MrEavesRemake';
|
81 |
+
color : var(--HB_Color_HeaderText);
|
82 |
+
}
|
83 |
+
h1 {
|
84 |
+
margin-bottom : 0.18cm; //Margin-bottom only because this is WIDE
|
85 |
+
column-span : all;
|
86 |
+
font-size : 0.89cm;
|
87 |
+
line-height : 1em;
|
88 |
+
-webkit-column-span : all;
|
89 |
+
-moz-column-span : all;
|
90 |
+
& + p::first-letter {
|
91 |
+
float : left;
|
92 |
+
padding-bottom : 2px;
|
93 |
+
padding-left : 40px; //Allow background color to extend into margins
|
94 |
+
margin-top : -0.3cm;
|
95 |
+
margin-bottom : -20px;
|
96 |
+
margin-left : -40px;
|
97 |
+
font-family : 'SolberaImitationRemake';
|
98 |
+
font-size : 3.5cm;
|
99 |
+
line-height : 1em;
|
100 |
+
color : rgba(0, 0, 0, 0);
|
101 |
+
background-image : linear-gradient(-45deg, #322814, #998250, #322814);
|
102 |
+
-webkit-background-clip : text;
|
103 |
+
background-clip : text;
|
104 |
+
}
|
105 |
+
& + p::first-line { font-variant : small-caps; }
|
106 |
+
}
|
107 |
+
h2 {
|
108 |
+
//margin-top : 0px; //Font is misaligned. Shift up slightly
|
109 |
+
//margin-bottom : 0.05cm;
|
110 |
+
font-size : 0.75cm;
|
111 |
+
line-height : 0.988em; //Font is misaligned. Shift up slightly
|
112 |
+
}
|
113 |
+
h3 {
|
114 |
+
//margin-top : -0.1cm; //Font is misaligned. Shift up slightly
|
115 |
+
//margin-bottom : 0.1cm;
|
116 |
+
font-size : 0.575cm;;
|
117 |
+
line-height : 0.995em; //Font is misaligned. Shift up slightly
|
118 |
+
border-bottom : 2px solid var(--HB_Color_HeaderUnderline);
|
119 |
+
& + * { margin-top : 0.17cm; }
|
120 |
+
}
|
121 |
+
* + h3 {
|
122 |
+
margin-top : 0.155cm; //(0.325 - 0.17)
|
123 |
+
}
|
124 |
+
h4 {
|
125 |
+
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
126 |
+
//margin-bottom : 0.02cm;
|
127 |
+
font-size : 0.458cm;
|
128 |
+
line-height : 0.971em; //Font is misaligned. Shift up slightly
|
129 |
+
& + * { margin-top : 0.09cm; }
|
130 |
+
}
|
131 |
+
* + h4 {
|
132 |
+
margin-top : 0.235cm; //(0.325 - 0.09)
|
133 |
+
}
|
134 |
+
h5 {
|
135 |
+
//margin-top : -0.02cm; //Font is misaligned. Shift up slightly
|
136 |
+
//margin-bottom : 0.02cm;
|
137 |
+
font-family : 'ScalySansSmallCapsRemake';
|
138 |
+
font-size : 0.423cm;
|
139 |
+
line-height : 0.951em; //Font is misaligned. Shift up slightly
|
140 |
+
& + * { margin-top : 0.2cm; }
|
141 |
+
}
|
142 |
+
// *****************************
|
143 |
+
// * TABLE
|
144 |
+
// *****************************/
|
145 |
+
table {
|
146 |
+
.useSansSerif();
|
147 |
+
line-height : 16px;
|
148 |
+
& + * { margin-top : 0.325cm; }
|
149 |
+
thead {
|
150 |
+
display : table-row-group;
|
151 |
+
font-weight : 800;
|
152 |
+
th {
|
153 |
+
//padding : 0.14em 0.4em;
|
154 |
+
padding : 0px 1.5px; // Both of these are temporary, just to force
|
155 |
+
vertical-align : bottom;
|
156 |
+
//line-height : 16px; // PDF to render at same height until Chrome 108
|
157 |
+
}
|
158 |
+
}
|
159 |
+
tbody {
|
160 |
+
tr {
|
161 |
+
td {
|
162 |
+
//padding : 0.14em 0.4em;
|
163 |
+
padding : 0px 1.5px; // Both of these are temporary, just to force
|
164 |
+
//line-height : 16px; // PDF to render at same height until Chrome 108
|
165 |
+
}
|
166 |
+
&:nth-child(odd) { background-color : var(--HB_Color_Accent); }
|
167 |
+
}
|
168 |
+
}
|
169 |
+
}
|
170 |
+
// *****************************
|
171 |
+
// * QUOTE
|
172 |
+
// *****************************/
|
173 |
+
.quote {
|
174 |
+
|
175 |
+
& > p {
|
176 |
+
font-style : italic;
|
177 |
+
line-height : 0.54cm;
|
178 |
+
|
179 |
+
&:first-child::first-line {
|
180 |
+
font-size : 0.38cm;
|
181 |
+
font-style : normal;
|
182 |
+
font-variant : small-caps;
|
183 |
+
}
|
184 |
+
}
|
185 |
+
|
186 |
+
p + .attribution { margin-top : 0; }
|
187 |
+
|
188 |
+
.attribution {
|
189 |
+
display : block;
|
190 |
+
font-style : normal;
|
191 |
+
line-height : 0.54cm;
|
192 |
+
text-align : right;
|
193 |
+
|
194 |
+
&::before {
|
195 |
+
margin-right : 0.2em;
|
196 |
+
content : '---';
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
+
& + * { margin-top : 0.54cm; }
|
201 |
+
|
202 |
+
}
|
203 |
+
|
204 |
+
// *****************************
|
205 |
+
// * NOTE
|
206 |
+
// *****************************/
|
207 |
+
.note {
|
208 |
+
.useSansSerif();
|
209 |
+
padding : 0.13cm 0.16cm;
|
210 |
+
background-color : var(--HB_Color_Accent);
|
211 |
+
border-style : solid;
|
212 |
+
border-width : 1px;
|
213 |
+
border-image : @noteBorderImage 12 stretch;
|
214 |
+
border-image-width : 11px;
|
215 |
+
border-image-outset : 9px 0px;
|
216 |
+
box-shadow : 1px 4px 14px #888888;
|
217 |
+
.page :where(&) {
|
218 |
+
margin-top : 9px; //Prevent top border getting cut off on colbreak
|
219 |
+
}
|
220 |
+
& + * { margin-top : 0.45cm; }
|
221 |
+
h5 { font-size : 0.375cm; }
|
222 |
+
p {
|
223 |
+
display : block;
|
224 |
+
padding-bottom : 0px;
|
225 |
+
}
|
226 |
+
:last-child { margin-bottom : 0; }
|
227 |
+
}
|
228 |
+
// ************************************
|
229 |
+
// * DESCRIPTIVE TEXT BOX
|
230 |
+
// ************************************/
|
231 |
+
.descriptive {
|
232 |
+
.useSansSerif();
|
233 |
+
padding : 0.1em;
|
234 |
+
background-color : #FAF7EA;
|
235 |
+
border-style : solid;
|
236 |
+
border-width : 7px;
|
237 |
+
border-image : @descriptiveBoxImage 12 stretch;
|
238 |
+
border-image-outset : 4px;
|
239 |
+
box-shadow : 0 0 6px #FAF7EA;
|
240 |
+
.page :where(&) {
|
241 |
+
margin-top : 4px; //Prevent top border getting cut off on colbreak
|
242 |
+
}
|
243 |
+
& + * { margin-top : 0.45cm; }
|
244 |
+
h5 { font-size : 0.375cm; }
|
245 |
+
p {
|
246 |
+
display : block;
|
247 |
+
padding-bottom : 0px;
|
248 |
+
line-height : 1.5em;
|
249 |
+
}
|
250 |
+
:last-child { margin-bottom : 0; }
|
251 |
+
}
|
252 |
+
// *****************************
|
253 |
+
// * Images Snippets
|
254 |
+
// *****************************/
|
255 |
+
|
256 |
+
/* Arist Credit */
|
257 |
+
.artist {
|
258 |
+
position : absolute;
|
259 |
+
width : auto;
|
260 |
+
font-family : 'WalterTurncoat';
|
261 |
+
font-size : 0.27cm;
|
262 |
+
color : var(--HB_Color_CaptionText);
|
263 |
+
text-align : center;
|
264 |
+
p, p + p {
|
265 |
+
margin : unset;
|
266 |
+
line-height : 1em;
|
267 |
+
text-indent : unset;
|
268 |
+
}
|
269 |
+
h5 {
|
270 |
+
font-family : 'WalterTurncoat';
|
271 |
+
font-size : 1.3em;
|
272 |
+
}
|
273 |
+
a {
|
274 |
+
color : inherit;
|
275 |
+
text-decoration : unset;
|
276 |
+
&:hover { text-decoration : underline; }
|
277 |
+
}
|
278 |
+
}
|
279 |
+
|
280 |
+
/* Watermark */
|
281 |
+
.watermark { color : black; }
|
282 |
+
|
283 |
+
/* Watercolor */
|
284 |
+
|
285 |
+
.watercolor1 { --wc : @watercolor1; }
|
286 |
+
.watercolor2 { --wc : @watercolor2; }
|
287 |
+
.watercolor3 { --wc : @watercolor3; }
|
288 |
+
.watercolor4 { --wc : @watercolor4; }
|
289 |
+
.watercolor5 { --wc : @watercolor5; }
|
290 |
+
.watercolor6 { --wc : @watercolor6; }
|
291 |
+
.watercolor7 { --wc : @watercolor7; }
|
292 |
+
.watercolor8 { --wc : @watercolor8; }
|
293 |
+
.watercolor9 { --wc : @watercolor9; }
|
294 |
+
.watercolor10 { --wc : @watercolor10; }
|
295 |
+
.watercolor11 { --wc : @watercolor11; }
|
296 |
+
.watercolor12 { --wc : @watercolor12; }
|
297 |
+
|
298 |
+
// *****************************
|
299 |
+
// * MONSTER STAT BLOCK
|
300 |
+
// *****************************/
|
301 |
+
.monster {
|
302 |
+
.useSansSerif();
|
303 |
+
&.frame {
|
304 |
+
width : calc(100% + 0.32cm);
|
305 |
+
padding : 4px 2px;
|
306 |
+
margin-right : -0.16cm;
|
307 |
+
margin-left : -0.16cm;
|
308 |
+
background-color : var(--HB_Color_MonsterStatBackground);
|
309 |
+
background-image : @monsterBlockBackground;
|
310 |
+
background-attachment : unset;
|
311 |
+
background-blend-mode : overlay;
|
312 |
+
border-style : solid;
|
313 |
+
border-width : 7px 6px;
|
314 |
+
border-image : @monsterBorderImage 14 round;
|
315 |
+
border-image-outset : 0px 2px;
|
316 |
+
box-shadow : 1px 4px 14px #888888;
|
317 |
+
}
|
318 |
+
|
319 |
+
position : relative;
|
320 |
+
padding : 0px;
|
321 |
+
margin-bottom : 0.325cm;
|
322 |
+
|
323 |
+
//Headers
|
324 |
+
h2 {
|
325 |
+
margin : 0;
|
326 |
+
font-size : 0.62cm;
|
327 |
+
line-height : 1em;
|
328 |
+
& + p {
|
329 |
+
margin-bottom : 0;
|
330 |
+
font-size : 0.304cm; //Monster size and type subtext
|
331 |
+
}
|
332 |
+
}
|
333 |
+
h3 {
|
334 |
+
font-family : 'ScalySansSmallCapsRemake';
|
335 |
+
font-size : 0.45cm;
|
336 |
+
border-bottom : 1.5px solid var(--HB_Color_HeaderText);
|
337 |
+
}
|
338 |
+
|
339 |
+
//Triangle dividers
|
340 |
+
hr {
|
341 |
+
height : 6px;
|
342 |
+
margin : 0.12cm 0cm;
|
343 |
+
visibility : visible;
|
344 |
+
background-image : @redTriangleImage;
|
345 |
+
background-size : 100% 100%;
|
346 |
+
border : none;
|
347 |
+
}
|
348 |
+
|
349 |
+
//Attribute Lists - All text between HRs is red
|
350 |
+
hr ~ :is(dl,p) { color : var(--HB_Color_HeaderText); }
|
351 |
+
hr:last-of-type {
|
352 |
+
& ~ :is(dl,p) {
|
353 |
+
color : inherit; // After the HRs, reset text to black
|
354 |
+
}
|
355 |
+
& + * {
|
356 |
+
margin-top : 0.325cm; // Space after last HR
|
357 |
+
}
|
358 |
+
}
|
359 |
+
|
360 |
+
// Monster Ability table
|
361 |
+
hr + table:first-of-type {
|
362 |
+
margin : 0;
|
363 |
+
column-span : none;
|
364 |
+
color : var(--HB_Color_HeaderText);
|
365 |
+
background-color : transparent;
|
366 |
+
border-style : none;
|
367 |
+
border-image : none;
|
368 |
+
-webkit-column-span : none;
|
369 |
+
tr { background-color : transparent; }
|
370 |
+
td,th { padding : 0px; }
|
371 |
+
}
|
372 |
+
//indent fix after bulleted lists
|
373 |
+
:is(ul,ol) + p { text-indent : 0; }
|
374 |
+
|
375 |
+
:last-child { margin-bottom : 0; }
|
376 |
+
}
|
377 |
+
|
378 |
+
//Full Width
|
379 |
+
.monster.wide {
|
380 |
+
.useColumns(0.96, @fillMode: balance);
|
381 |
+
}
|
382 |
+
|
383 |
+
// *****************************
|
384 |
+
// * FOOTER
|
385 |
+
// *****************************/
|
386 |
+
&::after {
|
387 |
+
position : absolute;
|
388 |
+
bottom : 0px;
|
389 |
+
left : 0px;
|
390 |
+
z-index : 100;
|
391 |
+
width : 100%;
|
392 |
+
height : 50px;
|
393 |
+
content : '';
|
394 |
+
background-image : @footerAccentImage;
|
395 |
+
background-size : cover;
|
396 |
+
}
|
397 |
+
&:nth-child(even) {
|
398 |
+
&::after { transform : scaleX(-1); }
|
399 |
+
.pageNumber { left : 2px; }
|
400 |
+
.footnote {
|
401 |
+
left : 80px;
|
402 |
+
text-align : left;
|
403 |
+
}
|
404 |
+
}
|
405 |
+
.pageNumber {
|
406 |
+
position : absolute;
|
407 |
+
right : 2px;
|
408 |
+
bottom : 22px;
|
409 |
+
width : 50px;
|
410 |
+
font-size : 0.9em;
|
411 |
+
color : var(--HB_Color_Footnotes);
|
412 |
+
text-align : center;
|
413 |
+
text-indent : 0;
|
414 |
+
&.auto::after { content : counter(phb-page-numbers); }
|
415 |
+
}
|
416 |
+
.footnote {
|
417 |
+
position : absolute;
|
418 |
+
right : 80px;
|
419 |
+
bottom : 32px;
|
420 |
+
z-index : 150;
|
421 |
+
width : 200px;
|
422 |
+
font-size : 0.8em;
|
423 |
+
color : var(--HB_Color_Footnotes);
|
424 |
+
text-align : right;
|
425 |
+
}
|
426 |
+
// ************************************
|
427 |
+
// * CODE BLOCKS
|
428 |
+
// ************************************/
|
429 |
+
code {
|
430 |
+
padding : 0px 4px;
|
431 |
+
font-size : 0.325cm;
|
432 |
+
color : #58180D;
|
433 |
+
background-color : #FAF7EA;
|
434 |
+
border-radius : 4px;
|
435 |
+
}
|
436 |
+
|
437 |
+
pre code {
|
438 |
+
padding : 0.15cm;
|
439 |
+
margin-bottom : 2px;
|
440 |
+
border-style : solid;
|
441 |
+
border-width : 1px;
|
442 |
+
border-radius : 12px;
|
443 |
+
border-image : @codeBorderImage 26 stretch;
|
444 |
+
border-image-width : 10px;
|
445 |
+
border-image-outset : 2px;
|
446 |
+
.page :where(&) {
|
447 |
+
margin-top : 2px; //Prevent top border getting cut off on colbreak
|
448 |
+
}
|
449 |
+
& + * { margin-top : 0.325cm; }
|
450 |
+
}
|
451 |
+
// *****************************
|
452 |
+
// * EXTRAS
|
453 |
+
// *****************************/
|
454 |
+
hr {
|
455 |
+
margin : 0px;
|
456 |
+
visibility : hidden;
|
457 |
+
}
|
458 |
+
//Text indent right after table
|
459 |
+
table + p { text-indent : 1em; }
|
460 |
+
// Nested lists
|
461 |
+
ul ul,ol ol,ul ol,ol ul {
|
462 |
+
margin-bottom : 0px;
|
463 |
+
margin-left : 1.5em;
|
464 |
+
}
|
465 |
+
}
|
466 |
+
// *****************************
|
467 |
+
// * SPELL LIST
|
468 |
+
// *****************************/
|
469 |
+
.page .spellList {
|
470 |
+
.useSansSerif();
|
471 |
+
column-count : 2;
|
472 |
+
ul + h5 { margin-top : 15px; }
|
473 |
+
p, ul {
|
474 |
+
font-size : 0.352cm;
|
475 |
+
line-height : 1.265em;
|
476 |
+
}
|
477 |
+
ul {
|
478 |
+
padding-left : 1em;
|
479 |
+
margin-bottom : 0.5em;
|
480 |
+
text-indent : -1em;
|
481 |
+
list-style-type : none;
|
482 |
+
-webkit-column-break-inside : auto;
|
483 |
+
page-break-inside : auto;
|
484 |
+
break-inside : auto;
|
485 |
+
}
|
486 |
+
&.wide { column-count : 4; }
|
487 |
+
}
|
488 |
+
|
489 |
+
// *****************************
|
490 |
+
// * CLASS TABLE
|
491 |
+
// *****************************/
|
492 |
+
.page .classTable {
|
493 |
+
th[colspan]:not([rowspan]) { white-space : nowrap; }
|
494 |
+
&.frame {
|
495 |
+
width : calc(100% + 0.2cm);
|
496 |
+
margin-top : 0.7cm;
|
497 |
+
margin-right : -0.1cm;
|
498 |
+
margin-bottom : 0.9cm;
|
499 |
+
margin-left : -0.1cm;
|
500 |
+
border-collapse : separate;
|
501 |
+
background-color : white;
|
502 |
+
border : initial;
|
503 |
+
border-style : solid;
|
504 |
+
border-image-source : @frameBorderImage;
|
505 |
+
border-image-slice : 200;
|
506 |
+
border-image-width : 47px;
|
507 |
+
border-image-outset : 0.4cm 0.3cm;
|
508 |
+
border-image-repeat : stretch;
|
509 |
+
&.wide:first-child { margin-top : 0.12cm; }
|
510 |
+
& + * { margin-top : 0; }
|
511 |
+
}
|
512 |
+
&.decoration { position : relative; }
|
513 |
+
&.decoration::before {
|
514 |
+
position : absolute;
|
515 |
+
top : 50%;
|
516 |
+
left : 50%;
|
517 |
+
z-index : -1;
|
518 |
+
width : 7.75cm;
|
519 |
+
height : calc(100% + 3.3cm);
|
520 |
+
content : '';
|
521 |
+
background-image : @classTableDecoration,
|
522 |
+
@classTableDecoration;
|
523 |
+
filter : drop-shadow(0px 0px 1px #C8C5C080);
|
524 |
+
background-repeat : no-repeat, no-repeat;
|
525 |
+
background-position : top, bottom;
|
526 |
+
background-size : contain, contain;
|
527 |
+
transform : translateY(-50%) translateX(-50%);
|
528 |
+
}
|
529 |
+
&.decoration.wide::before {
|
530 |
+
width : calc(100% + 3.3cm);
|
531 |
+
height : 7.75cm;
|
532 |
+
background-position : left, right;
|
533 |
+
}
|
534 |
+
h5 + table { margin-top : 0.2cm; }
|
535 |
+
}
|
536 |
+
// *****************************
|
537 |
+
// * FRONT COVER PAGE
|
538 |
+
// *****************************/
|
539 |
+
.page:has(.frontCover) {
|
540 |
+
columns : 1;
|
541 |
+
text-align : center;
|
542 |
+
&::after { all : unset; }
|
543 |
+
h1 {
|
544 |
+
margin-top : 1.2cm;
|
545 |
+
margin-bottom : 0;
|
546 |
+
font-family : 'NodestoCapsCondensed';
|
547 |
+
font-size : 2.245cm;
|
548 |
+
font-weight : normal;
|
549 |
+
line-height : 0.85em;
|
550 |
+
color : white;
|
551 |
+
text-shadow : unset;
|
552 |
+
text-transform : uppercase;
|
553 |
+
filter : drop-shadow(0 0 1.5px black) drop-shadow(0 0 0 black)
|
554 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)
|
555 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)
|
556 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black);
|
557 |
+
}
|
558 |
+
h2 {
|
559 |
+
font-family : 'NodestoCapsCondensed';
|
560 |
+
font-size : 0.85cm;
|
561 |
+
font-weight : normal;
|
562 |
+
color : white;
|
563 |
+
letter-spacing : 0.1cm;
|
564 |
+
filter : drop-shadow(0 0 1px black) drop-shadow(0 0 0 black)
|
565 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)
|
566 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)
|
567 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black);
|
568 |
+
}
|
569 |
+
hr {
|
570 |
+
position : relative;
|
571 |
+
display : block;
|
572 |
+
width : 12cm;
|
573 |
+
height : 0.5cm;
|
574 |
+
margin : auto;
|
575 |
+
visibility : visible;
|
576 |
+
background-image : @horizontalRule;
|
577 |
+
filter : drop-shadow(0 0 3px black);
|
578 |
+
background-size : 100% 100%;
|
579 |
+
border : none;
|
580 |
+
}
|
581 |
+
.banner {
|
582 |
+
position : absolute;
|
583 |
+
bottom : 4.2cm;
|
584 |
+
left : 0;
|
585 |
+
display : flex;
|
586 |
+
flex-direction : column;
|
587 |
+
justify-content : center;
|
588 |
+
width : 10.5cm;
|
589 |
+
height : 1.7cm;
|
590 |
+
padding-top : 0.1cm;
|
591 |
+
padding-left : 1cm;
|
592 |
+
font-family : 'NodestoCapsCondensed';
|
593 |
+
font-size : 1cm;
|
594 |
+
font-weight : normal;
|
595 |
+
color : white;
|
596 |
+
text-align : left;
|
597 |
+
letter-spacing : 0.014cm;
|
598 |
+
background-image : url('/assets/coverPageBanner.svg');
|
599 |
+
filter : drop-shadow(2px 2px 2px black);
|
600 |
+
}
|
601 |
+
.footnote {
|
602 |
+
position : absolute;
|
603 |
+
right : 0;
|
604 |
+
bottom : 1.3cm;
|
605 |
+
left : 0;
|
606 |
+
width : 70%;
|
607 |
+
margin-right : auto;
|
608 |
+
margin-left : auto;
|
609 |
+
font-family : 'Overpass';
|
610 |
+
font-size : 0.496cm;
|
611 |
+
color : white;
|
612 |
+
text-align : center;
|
613 |
+
filter : drop-shadow(0 0 0.7px black) drop-shadow(0 0 0 black)
|
614 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)
|
615 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black)
|
616 |
+
drop-shadow(0 0 0 black) drop-shadow(0 0 0 black);
|
617 |
+
}
|
618 |
+
.logo {
|
619 |
+
position : absolute;
|
620 |
+
top : 0.5cm;
|
621 |
+
right : 0;
|
622 |
+
left : 0;
|
623 |
+
filter : drop-shadow(0 0 0.075cm black);
|
624 |
+
img {
|
625 |
+
width : 100%;
|
626 |
+
height : 2cm;
|
627 |
+
}
|
628 |
+
}
|
629 |
+
}
|
630 |
+
// *****************************
|
631 |
+
// * INSIDE COVER PAGE
|
632 |
+
// *****************************/
|
633 |
+
.page:has(.insideCover) {
|
634 |
+
columns : 1;
|
635 |
+
text-align : center;
|
636 |
+
&::after { all : unset; }
|
637 |
+
h1 {
|
638 |
+
margin-top : 1.2cm;
|
639 |
+
margin-bottom : 0;
|
640 |
+
font-family : 'NodestoCapsCondensed';
|
641 |
+
font-size : 2.1cm;
|
642 |
+
font-weight : normal;
|
643 |
+
line-height : 0.85em;
|
644 |
+
text-transform : uppercase;
|
645 |
+
}
|
646 |
+
h2 {
|
647 |
+
font-family : 'NodestoCapsCondensed';
|
648 |
+
font-size : 0.85cm;
|
649 |
+
font-weight : normal;
|
650 |
+
letter-spacing : 0.5cm;
|
651 |
+
}
|
652 |
+
hr {
|
653 |
+
position : relative;
|
654 |
+
display : block;
|
655 |
+
width : 12cm;
|
656 |
+
height : 0.5cm;
|
657 |
+
margin : auto;
|
658 |
+
visibility : visible;
|
659 |
+
background-image : @horizontalRule;
|
660 |
+
background-size : 100% 100%;
|
661 |
+
border : none;
|
662 |
+
}
|
663 |
+
.logo {
|
664 |
+
position : absolute;
|
665 |
+
right : 0;
|
666 |
+
bottom : 1cm;
|
667 |
+
left : 0;
|
668 |
+
height : 2cm;
|
669 |
+
img {
|
670 |
+
width : 100%;
|
671 |
+
height : 2cm;
|
672 |
+
}
|
673 |
+
}
|
674 |
+
}
|
675 |
+
// *****************************
|
676 |
+
// * BACK COVER
|
677 |
+
// *****************************/
|
678 |
+
.page:has(.backCover) {
|
679 |
+
padding : 2.25cm 1.3cm 2cm 1.3cm;
|
680 |
+
color : #FFFFFF;
|
681 |
+
columns : 1;
|
682 |
+
&::after { all : unset; }
|
683 |
+
.columnWrapper { width : 7.6cm; }
|
684 |
+
.backCover {
|
685 |
+
position : absolute;
|
686 |
+
inset : 0;
|
687 |
+
z-index : -1;
|
688 |
+
width : 11cm;
|
689 |
+
background-image : @backCover;
|
690 |
+
background-repeat : no-repeat;
|
691 |
+
background-size : contain;
|
692 |
+
}
|
693 |
+
.blank { height : 1.4em; }
|
694 |
+
h1 {
|
695 |
+
margin-bottom : 0.3cm;
|
696 |
+
font-family : 'NodestoCapsCondensed';
|
697 |
+
font-size : 1.35cm;
|
698 |
+
line-height : 0.95em;
|
699 |
+
color : #ED1C24;
|
700 |
+
text-align : center;
|
701 |
+
}
|
702 |
+
h1 + p::first-line,
|
703 |
+
h1 + p::first-letter { all : unset; }
|
704 |
+
img {
|
705 |
+
position : absolute;
|
706 |
+
top : 0px;
|
707 |
+
z-index : -2;
|
708 |
+
height : 100%;
|
709 |
+
}
|
710 |
+
hr {
|
711 |
+
width : 4.5cm;
|
712 |
+
height : 0.53cm;
|
713 |
+
margin-top : 1.1cm;
|
714 |
+
margin-right : auto;
|
715 |
+
margin-left : auto;
|
716 |
+
visibility : visible;
|
717 |
+
background-image : @horizontalRule;
|
718 |
+
background-size : 100% 100%;
|
719 |
+
border : none;
|
720 |
+
}
|
721 |
+
p {
|
722 |
+
font-family : 'Overpass';
|
723 |
+
font-size : 0.332cm;
|
724 |
+
line-height : 1.5em;
|
725 |
+
}
|
726 |
+
hr + p {
|
727 |
+
margin-top : 0.6cm;
|
728 |
+
text-align : center;
|
729 |
+
}
|
730 |
+
.logo {
|
731 |
+
position : absolute;
|
732 |
+
bottom : 2cm;
|
733 |
+
left : 1.2cm;
|
734 |
+
z-index : 0;
|
735 |
+
width : 7.6cm;
|
736 |
+
height : 1.5cm;
|
737 |
+
img {
|
738 |
+
position : relative;
|
739 |
+
z-index : 0;
|
740 |
+
width : 100%;
|
741 |
+
height : 1.5cm;
|
742 |
+
}
|
743 |
+
p {
|
744 |
+
position : relative;
|
745 |
+
width : 100%;
|
746 |
+
font-family : 'NodestoCapsWide';
|
747 |
+
font-size : 0.4cm;
|
748 |
+
line-height : 1em;
|
749 |
+
color : #FFFFFF;
|
750 |
+
text-align : center;
|
751 |
+
text-indent : 0;
|
752 |
+
letter-spacing : 0.08em;
|
753 |
+
}
|
754 |
+
}
|
755 |
+
}
|
756 |
+
|
757 |
+
// *****************************
|
758 |
+
// * PART COVER
|
759 |
+
// *****************************/
|
760 |
+
.page:has(.partCover) {
|
761 |
+
padding-top : 0;
|
762 |
+
text-align : center;
|
763 |
+
columns : 1;
|
764 |
+
|
765 |
+
.partCover {
|
766 |
+
position : absolute;
|
767 |
+
top : 0;
|
768 |
+
left : 0;
|
769 |
+
width : 100%;
|
770 |
+
height : 6cm;
|
771 |
+
background-image : @partCoverHeaderPHB;
|
772 |
+
background-repeat : no-repeat;
|
773 |
+
background-size : 100%;
|
774 |
+
}
|
775 |
+
|
776 |
+
h1 {
|
777 |
+
position : relative;
|
778 |
+
margin-top : 0.4cm;
|
779 |
+
font-family : 'NodestoCapsCondensed';
|
780 |
+
font-size : 2.3cm;
|
781 |
+
text-align : center;
|
782 |
+
text-transform : uppercase;
|
783 |
+
}
|
784 |
+
|
785 |
+
h2 {
|
786 |
+
position : relative;
|
787 |
+
margin-top : -0.7em;
|
788 |
+
margin-right : auto;
|
789 |
+
margin-left : auto;
|
790 |
+
font-family : 'Overpass';
|
791 |
+
font-size : 0.45cm;
|
792 |
+
line-height : 1.1em;
|
793 |
+
}
|
794 |
+
}
|
795 |
+
|
796 |
+
// *****************************
|
797 |
+
// * TABLE OF CONTENTS
|
798 |
+
// *****************************/
|
799 |
+
.page {
|
800 |
+
&:has(.toc)::after { display : none; }
|
801 |
+
.toc {
|
802 |
+
-webkit-column-break-inside : avoid;
|
803 |
+
page-break-inside : avoid;
|
804 |
+
break-inside : avoid;
|
805 |
+
h1 {
|
806 |
+
margin-bottom : 0.3cm;
|
807 |
+
text-align : center;
|
808 |
+
}
|
809 |
+
a {
|
810 |
+
display : inline;
|
811 |
+
color : inherit;
|
812 |
+
text-decoration : none;
|
813 |
+
&:hover { text-decoration : underline; }
|
814 |
+
}
|
815 |
+
h4 {
|
816 |
+
margin-top : 0.2cm;
|
817 |
+
line-height : 0.4cm;
|
818 |
+
& + ul li { line-height : 1.2em; }
|
819 |
+
}
|
820 |
+
ul {
|
821 |
+
padding-left : 0;
|
822 |
+
margin-top : 0;
|
823 |
+
list-style-type : none;
|
824 |
+
a {
|
825 |
+
display : flex;
|
826 |
+
flex-flow : row nowrap;
|
827 |
+
justify-content : space-between;
|
828 |
+
width : 100%;
|
829 |
+
}
|
830 |
+
li + li h3 {
|
831 |
+
margin-top : 0.26cm;
|
832 |
+
line-height : 1em;
|
833 |
+
}
|
834 |
+
h3 span:first-child::after { border : none; }
|
835 |
+
span {
|
836 |
+
display : contents;
|
837 |
+
&:first-child::after {
|
838 |
+
bottom : 0.08cm;
|
839 |
+
flex : 1;
|
840 |
+
margin-right : 0.16cm;
|
841 |
+
margin-bottom : 0.08cm;
|
842 |
+
margin-left : 0.08cm; /* Spacing before dot leaders */
|
843 |
+
content : '';
|
844 |
+
border-bottom : 0.05cm dotted #000000;
|
845 |
+
}
|
846 |
+
&:last-child {
|
847 |
+
display : inline-block;
|
848 |
+
align-self : flex-end;
|
849 |
+
font-family : 'BookInsanityRemake';
|
850 |
+
font-size : 0.34cm;
|
851 |
+
font-weight : normal;
|
852 |
+
color : #000000;
|
853 |
+
}
|
854 |
+
}
|
855 |
+
ul { /* List indent */
|
856 |
+
margin-left : 1em;
|
857 |
+
}
|
858 |
+
}
|
859 |
+
&.wide {
|
860 |
+
.useColumns(0.96, @fillMode: balance);
|
861 |
+
}
|
862 |
+
}
|
863 |
+
}
|
864 |
+
|
865 |
+
// *****************************
|
866 |
+
// * DEFINITION LISTS
|
867 |
+
// *****************************/
|
868 |
+
.page {
|
869 |
+
dl {
|
870 |
+
line-height : 1.25em;
|
871 |
+
& + * { margin-top : 0.17cm; }
|
872 |
+
}
|
873 |
+
p + dl { margin-top : 0.17cm; }
|
874 |
+
dt {
|
875 |
+
margin-right : 5px;
|
876 |
+
margin-left : -1em;
|
877 |
+
}
|
878 |
+
}
|
879 |
+
|
880 |
+
// *****************************
|
881 |
+
// * WIDE
|
882 |
+
// *****************************/
|
883 |
+
.page .wide { margin-bottom : 0.325cm; }
|
884 |
+
|
885 |
+
.page h1 + * { margin-top : 0; }
|
886 |
+
|
887 |
+
//*****************************
|
888 |
+
// * RUNE TABLE
|
889 |
+
// *****************************/
|
890 |
+
.page {
|
891 |
+
.runeTable {
|
892 |
+
margin-block : 0.7cm;
|
893 |
+
table {
|
894 |
+
font-family : inherit;
|
895 |
+
tbody tr { background : unset; }
|
896 |
+
th, td {
|
897 |
+
width : 1.3cm;
|
898 |
+
height : 1.3cm;
|
899 |
+
font-weight : normal;
|
900 |
+
text-transform : uppercase;
|
901 |
+
vertical-align : middle;
|
902 |
+
outline : 1px solid #000000;
|
903 |
+
}
|
904 |
+
th {
|
905 |
+
font-family : 'BookInsanityRemake';
|
906 |
+
font-size : 0.45cm;
|
907 |
+
}
|
908 |
+
td { font-size : 0.7cm; }
|
909 |
+
}
|
910 |
+
|
911 |
+
&.frame {
|
912 |
+
border : initial;
|
913 |
+
border-style : solid;
|
914 |
+
border-image-source : @scriptBorder;
|
915 |
+
border-image-slice : 170;
|
916 |
+
border-image-width : 1.4cm;
|
917 |
+
border-image-outset : 0.45cm 0.35cm 0.4cm 0.4cm;
|
918 |
+
border-image-repeat : stretch;
|
919 |
+
}
|
920 |
+
}
|
921 |
+
}
|
922 |
+
// *****************************
|
923 |
+
// * INDEX
|
924 |
+
// *****************************/
|
925 |
+
.page {
|
926 |
+
.index {
|
927 |
+
font-size : 0.218cm;
|
928 |
+
|
929 |
+
ul ul { margin : 0; }
|
930 |
+
|
931 |
+
ul {
|
932 |
+
padding-left : 0;
|
933 |
+
text-indent : 0;
|
934 |
+
list-style-type : none;
|
935 |
+
}
|
936 |
+
|
937 |
+
& > ul > li {
|
938 |
+
padding-left : 1.5em;
|
939 |
+
text-indent : -1.5em;
|
940 |
+
}
|
941 |
+
}
|
942 |
+
}
|
dependencies/themes/V3/Blank/dropdownPreview.png
ADDED
Git LFS Details
|
dependencies/themes/V3/Blank/dropdownTexture.png
ADDED
Git LFS Details
|
dependencies/themes/V3/Blank/settings.json
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name" : "Blank",
|
3 |
+
"renderer" : "V3",
|
4 |
+
"baseTheme" : false,
|
5 |
+
"baseSnippets" : false
|
6 |
+
}
|
dependencies/themes/V3/Blank/snippets.js
ADDED
@@ -0,0 +1,444 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* eslint-disable max-lines */
|
2 |
+
|
3 |
+
const WatercolorGen = require('./snippets/watercolor.gen.js');
|
4 |
+
const ImageMaskGen = require('./snippets/imageMask.gen.js');
|
5 |
+
const FooterGen = require('./snippets/footer.gen.js');
|
6 |
+
const dedent = require('dedent-tabs').default;
|
7 |
+
|
8 |
+
module.exports = [
|
9 |
+
|
10 |
+
{
|
11 |
+
groupName : 'Text Editor',
|
12 |
+
icon : 'fas fa-pencil-alt',
|
13 |
+
view : 'text',
|
14 |
+
snippets : [
|
15 |
+
{
|
16 |
+
name : 'Column Break',
|
17 |
+
icon : 'fas fa-columns',
|
18 |
+
gen : '\n\\column\n'
|
19 |
+
},
|
20 |
+
{
|
21 |
+
name : 'New Page',
|
22 |
+
icon : 'fas fa-file-alt',
|
23 |
+
gen : '\n\\page\n'
|
24 |
+
},
|
25 |
+
{
|
26 |
+
name : 'Page Number',
|
27 |
+
icon : 'fas fa-bookmark',
|
28 |
+
gen : '{{pageNumber 1}}\n'
|
29 |
+
},
|
30 |
+
{
|
31 |
+
name : 'Auto-incrementing Page Number',
|
32 |
+
icon : 'fas fa-sort-numeric-down',
|
33 |
+
gen : '{{pageNumber,auto}}\n'
|
34 |
+
},
|
35 |
+
{
|
36 |
+
name : 'Footer',
|
37 |
+
icon : 'fas fa-shoe-prints',
|
38 |
+
gen : FooterGen.createFooterFunc(),
|
39 |
+
subsnippets : [
|
40 |
+
{
|
41 |
+
name : 'Footer from H1',
|
42 |
+
icon : 'fas fa-dice-one',
|
43 |
+
gen : FooterGen.createFooterFunc(1)
|
44 |
+
},
|
45 |
+
{
|
46 |
+
name : 'Footer from H2',
|
47 |
+
icon : 'fas fa-dice-two',
|
48 |
+
gen : FooterGen.createFooterFunc(2)
|
49 |
+
},
|
50 |
+
{
|
51 |
+
name : 'Footer from H3',
|
52 |
+
icon : 'fas fa-dice-three',
|
53 |
+
gen : FooterGen.createFooterFunc(3)
|
54 |
+
},
|
55 |
+
{
|
56 |
+
name : 'Footer from H4',
|
57 |
+
icon : 'fas fa-dice-four',
|
58 |
+
gen : FooterGen.createFooterFunc(4)
|
59 |
+
},
|
60 |
+
{
|
61 |
+
name : 'Footer from H5',
|
62 |
+
icon : 'fas fa-dice-five',
|
63 |
+
gen : FooterGen.createFooterFunc(5)
|
64 |
+
},
|
65 |
+
{
|
66 |
+
name : 'Footer from H6',
|
67 |
+
icon : 'fas fa-dice-six',
|
68 |
+
gen : FooterGen.createFooterFunc(6)
|
69 |
+
}
|
70 |
+
]
|
71 |
+
},
|
72 |
+
{
|
73 |
+
name : 'Vertical Spacing',
|
74 |
+
icon : 'fas fa-arrows-alt-v',
|
75 |
+
gen : '\n::::\n'
|
76 |
+
},
|
77 |
+
{
|
78 |
+
name : 'Horizontal Spacing',
|
79 |
+
icon : 'fas fa-arrows-alt-h',
|
80 |
+
gen : ' {{width:100px}} '
|
81 |
+
},
|
82 |
+
{
|
83 |
+
name : 'Wide Block',
|
84 |
+
icon : 'fas fa-window-maximize',
|
85 |
+
gen : dedent`\n
|
86 |
+
{{wide
|
87 |
+
Everything in here will be extra wide. Tables, text, everything!
|
88 |
+
Beware though, CSS columns can behave a bit weird sometimes. You may
|
89 |
+
have to manually place column breaks with \`\column\` to make the
|
90 |
+
surrounding text flow with this wide block the way you want.
|
91 |
+
}}
|
92 |
+
\n`
|
93 |
+
},
|
94 |
+
{
|
95 |
+
name : 'QR Code',
|
96 |
+
icon : 'fas fa-qrcode',
|
97 |
+
gen : (brew)=>{
|
98 |
+
return `![]` +
|
99 |
+
`(https://api.qrserver.com/v1/create-qr-code/?data=` +
|
100 |
+
`https://homebrewery.naturalcrit.com${brew.shareId ? `/share/${brew.shareId}` : ''}` +
|
101 |
+
`&size=100x100) {width:100px;mix-blend-mode:multiply}`;
|
102 |
+
}
|
103 |
+
},
|
104 |
+
{
|
105 |
+
name : 'Link to page',
|
106 |
+
icon : 'fas fa-link',
|
107 |
+
gen : '[Click here](#p3) to go to page 3\n'
|
108 |
+
},
|
109 |
+
{
|
110 |
+
name : 'Add Comment',
|
111 |
+
icon : 'fas fa-code',
|
112 |
+
gen : '<!-- This is a comment that will not be rendered into your brew. Hotkey (Ctrl/Cmd + /). -->'
|
113 |
+
},
|
114 |
+
{
|
115 |
+
name : 'Homebrewery Credit',
|
116 |
+
icon : 'fas fa-dice-d20',
|
117 |
+
gen : function(){
|
118 |
+
return dedent`
|
119 |
+
{{homebreweryCredits
|
120 |
+
Made With
|
121 |
+
|
122 |
+
{{homebreweryIcon}}
|
123 |
+
|
124 |
+
The Homebrewery
|
125 |
+
[Homebrewery.Naturalcrit.com](https://homebrewery.naturalcrit.com)
|
126 |
+
}}\n\n`;
|
127 |
+
},
|
128 |
+
}
|
129 |
+
]
|
130 |
+
},
|
131 |
+
{
|
132 |
+
groupName : 'Style Editor',
|
133 |
+
icon : 'fas fa-pencil-alt',
|
134 |
+
view : 'style',
|
135 |
+
snippets : [
|
136 |
+
{
|
137 |
+
name : 'Add Comment',
|
138 |
+
icon : 'fas fa-code',
|
139 |
+
gen : '/* This is a comment that will not be rendered into your brew. */'
|
140 |
+
},
|
141 |
+
]
|
142 |
+
},
|
143 |
+
|
144 |
+
/*********************** IMAGES *******************/
|
145 |
+
{
|
146 |
+
groupName : 'Images',
|
147 |
+
icon : 'fas fa-images',
|
148 |
+
view : 'text',
|
149 |
+
snippets : [
|
150 |
+
{
|
151 |
+
name : 'Image',
|
152 |
+
icon : 'fas fa-image',
|
153 |
+
gen : dedent`
|
154 |
+
![cat warrior](https://s-media-cache-ak0.pinimg.com/736x/4a/81/79/4a8179462cfdf39054a418efd4cb743e.jpg) {width:325px,mix-blend-mode:multiply}`
|
155 |
+
},
|
156 |
+
{
|
157 |
+
name : 'Background Image',
|
158 |
+
icon : 'fas fa-tree',
|
159 |
+
gen : dedent`
|
160 |
+
![homebrew mug](http://i.imgur.com/hMna6G0.png) {position:absolute,top:50px,right:30px,width:280px}`
|
161 |
+
},
|
162 |
+
{
|
163 |
+
name : 'Watercolor Splatter',
|
164 |
+
icon : 'fas fa-fill-drip',
|
165 |
+
gen : WatercolorGen,
|
166 |
+
},
|
167 |
+
{
|
168 |
+
name : 'Watercolor Center',
|
169 |
+
icon : 'fac mask-center',
|
170 |
+
gen : ImageMaskGen.center,
|
171 |
+
experimental : true,
|
172 |
+
},
|
173 |
+
{
|
174 |
+
name : 'Watercolor Edge',
|
175 |
+
icon : 'fac mask-edge',
|
176 |
+
gen : ImageMaskGen.edge('bottom'),
|
177 |
+
experimental : true,
|
178 |
+
subsnippets : [
|
179 |
+
{
|
180 |
+
name : 'Top',
|
181 |
+
icon : 'fac position-top',
|
182 |
+
gen : ImageMaskGen.edge('top'),
|
183 |
+
},
|
184 |
+
{
|
185 |
+
name : 'Right',
|
186 |
+
icon : 'fac position-right',
|
187 |
+
gen : ImageMaskGen.edge('right'),
|
188 |
+
},
|
189 |
+
{
|
190 |
+
name : 'Bottom',
|
191 |
+
icon : 'fac position-bottom',
|
192 |
+
gen : ImageMaskGen.edge('bottom'),
|
193 |
+
},
|
194 |
+
{
|
195 |
+
name : 'Left',
|
196 |
+
icon : 'fac position-left',
|
197 |
+
gen : ImageMaskGen.edge('left'),
|
198 |
+
},
|
199 |
+
]
|
200 |
+
},
|
201 |
+
{
|
202 |
+
name : 'Watercolor Corner',
|
203 |
+
icon : 'fac mask-corner',
|
204 |
+
gen : ImageMaskGen.corner,
|
205 |
+
experimental : true,
|
206 |
+
subsnippets : [
|
207 |
+
{
|
208 |
+
name : 'Top-Left',
|
209 |
+
icon : 'fac position-top-left',
|
210 |
+
gen : ImageMaskGen.corner('top', 'left'),
|
211 |
+
},
|
212 |
+
{
|
213 |
+
name : 'Top-Right',
|
214 |
+
icon : 'fac position-top-right',
|
215 |
+
gen : ImageMaskGen.corner('top', 'right'),
|
216 |
+
},
|
217 |
+
{
|
218 |
+
name : 'Bottom-Left',
|
219 |
+
icon : 'fac position-bottom-left',
|
220 |
+
gen : ImageMaskGen.corner('bottom', 'left'),
|
221 |
+
},
|
222 |
+
{
|
223 |
+
name : 'Bottom-Right',
|
224 |
+
icon : 'fac position-bottom-right',
|
225 |
+
gen : ImageMaskGen.corner('bottom', 'right'),
|
226 |
+
}
|
227 |
+
]
|
228 |
+
},
|
229 |
+
{
|
230 |
+
name : 'Watermark',
|
231 |
+
icon : 'fas fa-id-card',
|
232 |
+
gen : dedent`
|
233 |
+
{{watermark Homebrewery}}\n`
|
234 |
+
},
|
235 |
+
]
|
236 |
+
},
|
237 |
+
|
238 |
+
/********************* TABLES *********************/
|
239 |
+
|
240 |
+
{
|
241 |
+
groupName : 'Tables',
|
242 |
+
icon : 'fas fa-table',
|
243 |
+
view : 'text',
|
244 |
+
snippets : [
|
245 |
+
{
|
246 |
+
name : 'Table',
|
247 |
+
icon : 'fas fa-th-list',
|
248 |
+
gen : function(){
|
249 |
+
return dedent`
|
250 |
+
##### Character Advancement
|
251 |
+
| Experience Points | Level | Proficiency Bonus |
|
252 |
+
|:------------------|:-----:|:-----------------:|
|
253 |
+
| 0 | 1 | +2 |
|
254 |
+
| 300 | 2 | +2 |
|
255 |
+
| 900 | 3 | +2 |
|
256 |
+
| 2,700 | 4 | +2 |
|
257 |
+
| 6,500 | 5 | +3 |
|
258 |
+
| 14,000 | 6 | +3 |
|
259 |
+
\n`;
|
260 |
+
}
|
261 |
+
},
|
262 |
+
{
|
263 |
+
name : 'Wide Table',
|
264 |
+
icon : 'fas fa-list',
|
265 |
+
gen : function(){
|
266 |
+
return dedent`
|
267 |
+
{{wide
|
268 |
+
##### Weapons
|
269 |
+
| Name | Cost | Damage | Weight | Properties |
|
270 |
+
|:------------------------|:-----:|:----------------|--------:|:-----------|
|
271 |
+
| *Simple Melee Weapons* | | | | |
|
272 |
+
|   Club | 1 sp | 1d4 bludgeoning | 2 lb. | Light |
|
273 |
+
|   Dagger | 2 gp | 1d4 piercing | 1 lb. | Finesse |
|
274 |
+
|   Spear | 1 gp | 1d6 piercing | 3 lb. | Thrown |
|
275 |
+
| *Simple Ranged Weapons* | | | | |
|
276 |
+
|   Dart | 5 cp | 1d4 piercig | 1/4 lb. | Finesse |
|
277 |
+
|   Shortbow | 25 gp | 1d6 piercing | 2 lb. | Ammunition |
|
278 |
+
|   Sling | 1 sp | 1d4 bludgeoning | — | Ammunition |
|
279 |
+
}}
|
280 |
+
\n`;
|
281 |
+
}
|
282 |
+
},
|
283 |
+
{
|
284 |
+
name : 'Split Table',
|
285 |
+
icon : 'fas fa-th-large',
|
286 |
+
gen : function(){
|
287 |
+
return dedent`
|
288 |
+
##### Typical Difficulty Classes
|
289 |
+
{{column-count:2
|
290 |
+
| Task Difficulty | DC |
|
291 |
+
|:----------------|:--:|
|
292 |
+
| Very easy | 5 |
|
293 |
+
| Easy | 10 |
|
294 |
+
| Medium | 15 |
|
295 |
+
|
296 |
+
| Task Difficulty | DC |
|
297 |
+
|:------------------|:--:|
|
298 |
+
| Hard | 20 |
|
299 |
+
| Very hard | 25 |
|
300 |
+
| Nearly impossible | 30 |
|
301 |
+
}}
|
302 |
+
\n`;
|
303 |
+
}
|
304 |
+
}
|
305 |
+
]
|
306 |
+
},
|
307 |
+
/**************** FONTS *************/
|
308 |
+
{
|
309 |
+
groupName : 'Fonts',
|
310 |
+
icon : 'fas fa-keyboard',
|
311 |
+
view : 'text',
|
312 |
+
snippets : [
|
313 |
+
{
|
314 |
+
name : 'Open Sans',
|
315 |
+
icon : 'font OpenSans',
|
316 |
+
gen : dedent`{{font-family:OpenSans Dummy Text}}`
|
317 |
+
},
|
318 |
+
{
|
319 |
+
name : 'Code Bold',
|
320 |
+
icon : 'font CodeBold',
|
321 |
+
gen : dedent`{{font-family:CodeBold Dummy Text}}`
|
322 |
+
},
|
323 |
+
{
|
324 |
+
name : 'Code Light',
|
325 |
+
icon : 'font CodeLight',
|
326 |
+
gen : dedent`{{font-family:CodeLight Dummy Text}}`
|
327 |
+
},
|
328 |
+
{
|
329 |
+
name : 'Scaly Sans Remake',
|
330 |
+
icon : 'font ScalySansRemake',
|
331 |
+
gen : dedent`{{font-family:ScalySansRemake Dummy Text}}`
|
332 |
+
},
|
333 |
+
{
|
334 |
+
name : 'Book Insanity Remake',
|
335 |
+
icon : 'font BookInsanityRemake',
|
336 |
+
gen : dedent`{{font-family:BookInsanityRemake Dummy Text}}`
|
337 |
+
},
|
338 |
+
{
|
339 |
+
name : 'Mr Eaves Remake',
|
340 |
+
icon : 'font MrEavesRemake',
|
341 |
+
gen : dedent`{{font-family:MrEavesRemake Dummy Text}}`
|
342 |
+
},
|
343 |
+
{
|
344 |
+
name: 'Solbera Imitation Remake',
|
345 |
+
icon: 'font SolberaImitationRemake',
|
346 |
+
gen: dedent`{{font-family:SolberaImitationRemake Dummy Text}}`
|
347 |
+
},
|
348 |
+
{
|
349 |
+
name: 'Scaly Sans Small Caps Remake',
|
350 |
+
icon: 'font ScalySansSmallCapsRemake',
|
351 |
+
gen: dedent`{{font-family:ScalySansSmallCapsRemake Dummy Text}}`
|
352 |
+
},
|
353 |
+
{
|
354 |
+
name: 'Walter Turncoat',
|
355 |
+
icon: 'font WalterTurncoat',
|
356 |
+
gen: dedent`{{font-family:WalterTurncoat Dummy Text}}`
|
357 |
+
},
|
358 |
+
{
|
359 |
+
name: 'Lato',
|
360 |
+
icon: 'font Lato',
|
361 |
+
gen: dedent`{{font-family:Lato Dummy Text}}`
|
362 |
+
},
|
363 |
+
{
|
364 |
+
name: 'Courier',
|
365 |
+
icon: 'font Courier',
|
366 |
+
gen: dedent`{{font-family:Courier Dummy Text}}`
|
367 |
+
},
|
368 |
+
{
|
369 |
+
name: 'Nodesto Caps Condensed',
|
370 |
+
icon: 'font NodestoCapsCondensed',
|
371 |
+
gen: dedent`{{font-family:NodestoCapsCondensed Dummy Text}}`
|
372 |
+
},
|
373 |
+
{
|
374 |
+
name: 'Overpass',
|
375 |
+
icon: 'font Overpass',
|
376 |
+
gen: dedent`{{font-family:Overpass Dummy Text}}`
|
377 |
+
},
|
378 |
+
{
|
379 |
+
name: 'Davek',
|
380 |
+
icon: 'font Davek',
|
381 |
+
gen: dedent`{{font-family:Davek Dummy Text}}`
|
382 |
+
},
|
383 |
+
{
|
384 |
+
name: 'Iokharic',
|
385 |
+
icon: 'font Iokharic',
|
386 |
+
gen: dedent`{{font-family:Iokharic Dummy Text}}`
|
387 |
+
},
|
388 |
+
{
|
389 |
+
name: 'Rellanic',
|
390 |
+
icon: 'font Rellanic',
|
391 |
+
gen: dedent`{{font-family:Rellanic Dummy Text}}`
|
392 |
+
},
|
393 |
+
{
|
394 |
+
name: 'Times New Roman',
|
395 |
+
icon: 'font TimesNewRoman',
|
396 |
+
gen: dedent`{{font-family:"Times New Roman" Dummy Text}}`
|
397 |
+
}
|
398 |
+
]
|
399 |
+
},
|
400 |
+
|
401 |
+
/**************** PAGE *************/
|
402 |
+
|
403 |
+
{
|
404 |
+
groupName : 'Print',
|
405 |
+
icon : 'fas fa-print',
|
406 |
+
view : 'style',
|
407 |
+
snippets : [
|
408 |
+
{
|
409 |
+
name : 'A4 Page Size',
|
410 |
+
icon : 'far fa-file',
|
411 |
+
gen : dedent`/* A4 Page Size */
|
412 |
+
.page{
|
413 |
+
width : 210mm;
|
414 |
+
height : 296.8mm;
|
415 |
+
}\n\n`
|
416 |
+
},
|
417 |
+
{
|
418 |
+
name : 'Square Page Size',
|
419 |
+
icon : 'far fa-file',
|
420 |
+
gen : dedent`/* Square Page Size */
|
421 |
+
.page {
|
422 |
+
width : 125mm;
|
423 |
+
height : 125mm;
|
424 |
+
padding : 12.5mm;
|
425 |
+
columns : unset;
|
426 |
+
}\n\n`
|
427 |
+
},
|
428 |
+
{
|
429 |
+
name : 'Ink Friendly',
|
430 |
+
icon : 'fas fa-tint',
|
431 |
+
gen : dedent`
|
432 |
+
/* Ink Friendly */
|
433 |
+
*:is(.page) {
|
434 |
+
background : white !important;
|
435 |
+
filter : drop-shadow(0px 0px 3px #888) !important;
|
436 |
+
}
|
437 |
+
|
438 |
+
.page img {
|
439 |
+
visibility : hidden;
|
440 |
+
}\n\n`
|
441 |
+
},
|
442 |
+
]
|
443 |
+
}
|
444 |
+
];
|
dependencies/themes/V3/Blank/snippets/footer.gen.js
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const Markdown = require('../../../../shared/naturalcrit/markdown.js');
|
2 |
+
|
3 |
+
module.exports = {
|
4 |
+
createFooterFunc : function(headerSize=1){
|
5 |
+
return (props)=>{
|
6 |
+
const cursorPos = props.cursorPos;
|
7 |
+
|
8 |
+
const markdownText = props.brew.text.split('\n').slice(0, cursorPos.line).join('\n');
|
9 |
+
const markdownTokens = Markdown.marked.lexer(markdownText);
|
10 |
+
const headerToken = markdownTokens.findLast((lexerToken)=>{ return lexerToken.type === 'heading' && lexerToken.depth === headerSize; });
|
11 |
+
const headerText = headerToken?.tokens.map((token)=>{ return token.text; }).join('');
|
12 |
+
const outputText = headerText || 'PART 1 | SECTION NAME';
|
13 |
+
|
14 |
+
return `\n{{footnote ${outputText}}}\n`;
|
15 |
+
};
|
16 |
+
}
|
17 |
+
};
|
dependencies/themes/V3/Blank/snippets/imageMask.gen.js
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
const dedent = require('dedent-tabs').default;
|
3 |
+
|
4 |
+
module.exports = {
|
5 |
+
center : ()=>{
|
6 |
+
return dedent`
|
7 |
+
{{imageMaskCenter${_.random(1, 16)},--offsetX:0%,--offsetY:0%,--rotation:0
|
8 |
+
![](https://i.imgur.com/GZfjDWV.png){height:100%}
|
9 |
+
}}
|
10 |
+
<!-- Use --offsetX to shift the mask left or right (can use cm instead of %)
|
11 |
+
Use --offsetY to shift the mask up or down
|
12 |
+
Use --rotation to set rotation angle in degrees. -->\n\n`;
|
13 |
+
},
|
14 |
+
|
15 |
+
edge : (side = 'bottom')=>{
|
16 |
+
const rotation = {
|
17 |
+
'bottom' : 0,
|
18 |
+
'top' : 180,
|
19 |
+
'left' : 90,
|
20 |
+
'right' : 270
|
21 |
+
}[side];
|
22 |
+
return dedent`
|
23 |
+
{{imageMaskEdge${_.random(1, 8)},--offset:0%,--rotation:${rotation}
|
24 |
+
![](https://i.imgur.com/GZfjDWV.png){height:100%}
|
25 |
+
}}
|
26 |
+
<!-- Use --offset to shift the mask away from page center (can use cm instead of %)
|
27 |
+
Use --rotation to set rotation angle in degrees. -->\n\n`;
|
28 |
+
},
|
29 |
+
|
30 |
+
corner : (y = 'top', x = 'left')=>{
|
31 |
+
const offsetX = (x == 'left' ? '-50%' : '50%');
|
32 |
+
const offsetY = (y == 'top' ? '50%' : '-50%');
|
33 |
+
return dedent`
|
34 |
+
{{imageMaskCorner${_.random(1, 37)},--offsetX:${offsetX},--offsetY:${offsetY},--rotation:0
|
35 |
+
![](https://i.imgur.com/GZfjDWV.png){height:100%}
|
36 |
+
}}
|
37 |
+
<!-- Use --offsetX to shift the mask left or right (can use cm instead of %)
|
38 |
+
Use --offsetY to shift the mask up or down
|
39 |
+
Use --rotation to set rotation angle in degrees. -->\n\n`;
|
40 |
+
}
|
41 |
+
|
42 |
+
};
|
43 |
+
|
44 |
+
()=>{
|
45 |
+
|
46 |
+
};
|
dependencies/themes/V3/Blank/snippets/watercolor.gen.js
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const _ = require('lodash');
|
2 |
+
|
3 |
+
module.exports = ()=>{
|
4 |
+
return `{{watercolor${_.random(1, 12)},top:20px,left:30px,width:300px,background-color:#BBAD82,opacity:80%}}\n\n`;
|
5 |
+
};
|