diff --git a/Kids on Brooms Official/kobrooms.css b/Kids on Brooms Official/kobrooms.css
new file mode 100644
index 0000000000..0cf090b713
--- /dev/null
+++ b/Kids on Brooms Official/kobrooms.css
@@ -0,0 +1,391 @@
+@import url("https://fonts.googleapis.com/css?family=Chelsea+Market|Montserrat:400&display=swap");
+.sheet-kob-wrapper {
+ padding: 1em 3em;
+ background: url("https://s3.amazonaws.com/files.d20.io/images/140339579/OXUcAr8mw0JvS2Ejs7Fj8Q/med.png?1591123400") center/cover;
+ font-family: "Chelsea Market", serif;
+ font-size: 10pt;
+}
+.sheet-kob-wrapper * {
+ box-sizing: border-box;
+}
+.sheet-kob-wrapper input {
+ height: 1.75em;
+}
+.sheet-kob-wrapper input[type=number] {
+ -moz-appearance: textfield;
+ text-align: center;
+}
+.sheet-kob-wrapper input[type=number]::-webkit-outer-spin-button, .sheet-kob-wrapper input[type=number]::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+.sheet-kob-wrapper input[type=number],
+.sheet-kob-wrapper input[type=text],
+.sheet-kob-wrapper textarea,
+.sheet-kob-wrapper select {
+ background-color: transparent;
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 12pt;
+ font-variant: normal;
+}
+.sheet-kob-wrapper input[type=number]:hover,
+.sheet-kob-wrapper input[type=text]:hover,
+.sheet-kob-wrapper textarea:hover,
+.sheet-kob-wrapper select:hover {
+ background-color: rgba(0, 0, 0, 0.125);
+}
+.sheet-kob-wrapper select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ height: 1.75em;
+ cursor: pointer;
+ background: transparent url("https://s3.amazonaws.com/files.d20.io/images/138210258/mZTqw1vke8SrkprMJmiZQw/med.png?1590443723") right 5px center no-repeat;
+}
+.sheet-kob-wrapper textarea {
+ resize: vertical;
+ width: 100%;
+ border: 1px solid #000;
+ border-radius: 0;
+}
+.sheet-kob-wrapper label {
+ padding: 0;
+ margin: 0;
+}
+.sheet-kob-wrapper .itemcontrol {
+ position: relative;
+}
+.sheet-kob-wrapper .itemcontrol button.repcontrol_del,
+.sheet-kob-wrapper .itemcontrol a.repcontrol_move {
+ display: block;
+ top: calc(50% - 1.5rem);
+ position: relative;
+ border: 1px solid #000;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+ box-shadow: none;
+ line-height: 2em;
+ text-shadow: none;
+ font-weight: bold;
+}
+.sheet-kob-wrapper .itemcontrol button.repcontrol_del {
+ margin-right: 0.25rem;
+ background: #a00;
+ color: #fff;
+}
+.sheet-kob-wrapper .itemcontrol a.repcontrol_move {
+ margin-left: 0.25rem;
+ background: transparent;
+ color: #000;
+}
+.sheet-kob-wrapper .repcontrol {
+ padding: 0.25em;
+ background-color: transparent;
+}
+.sheet-kob-wrapper .repcontrol button.repcontrol_add,
+.sheet-kob-wrapper .repcontrol button.repcontrol_del,
+.sheet-kob-wrapper .repcontrol button.repcontrol_move,
+.sheet-kob-wrapper .repcontrol button.repcontrol_edit {
+ display: block;
+ border: 1px solid #000;
+ border-radius: 0;
+ background: none;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+ box-shadow: none;
+ font-size: 0;
+ line-height: 1em;
+ text-shadow: none;
+}
+.sheet-kob-wrapper .repcontrol button.repcontrol_add:before {
+ display: block;
+ content: "&";
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+}
+.sheet-kob-wrapper .repcontrol button.repcontrol_edit:before {
+ display: block;
+ content: "p";
+ right: 5px;
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+}
+.sheet-kob-wrapper .sheet-kob-header {
+ display: grid;
+ grid-template-columns: 1fr 2fr;
+ gap: 1.5em;
+ margin-bottom: 1.5em;
+}
+.sheet-kob-wrapper .sheet-kob-header__logo {
+ height: 50px;
+}
+.sheet-kob-wrapper .sheet-kob-header__trope[type=text] {
+ width: 100%;
+ padding: 0.25em;
+ border: 2px solid #000;
+ border-radius: 0;
+ background: transparent;
+ font-size: 24pt;
+ text-align: center;
+}
+.sheet-kob-wrapper .sheet-kob-body {
+ display: grid;
+ grid-template-columns: 2fr 1.25fr;
+ gap: 1.5em;
+}
+.sheet-kob-wrapper .sheet-kob-body__strengths, .sheet-kob-wrapper .sheet-kob-body__flaws, .sheet-kob-wrapper .sheet-kob-body__stats, .sheet-kob-wrapper .sheet-kob-body__adversity, .sheet-kob-wrapper .sheet-kob-body__tropes, .sheet-kob-wrapper .sheet-kob-body__character {
+ padding: 1.25em 1.25em;
+ margin-bottom: 1.5em;
+ background: url("https://s3.amazonaws.com/files.d20.io/images/140337271/wJZvx5ua03bzSc0DViK_YA/med.png?1591122772") top left/40px no-repeat, url("https://s3.amazonaws.com/files.d20.io/images/140337272/8TEVnItbqmvdXka2UVLulw/med.png?1591122772") top right/40px no-repeat, url("https://s3.amazonaws.com/files.d20.io/images/140337270/uKtXcumLfN1rNOl0EaBGKA/med.png?1591122772") bottom left/40px no-repeat, url("https://s3.amazonaws.com/files.d20.io/images/140337273/RPhav9hWTnUy4Sd0jwqq6A/med.png?1591122772") bottom right/40px no-repeat;
+ border: 2px solid #000;
+}
+.sheet-kob-wrapper .sheet-kob-body__stats {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+}
+.sheet-kob-wrapper .sheet-kob-body__stats h2 {
+ grid-column: 1/-1;
+}
+.sheet-kob-wrapper .sheet-kob-body__subtext {
+ display: block;
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 11pt;
+ text-align: center;
+}
+.sheet-kob-wrapper .sheet-kob-body__flaws .repcontrol, .sheet-kob-wrapper .sheet-kob-body__strengths .repcontrol {
+ margin-top: 4em;
+ border-top: 2px solid #000;
+}
+.sheet-kob-wrapper .sheet-kob-body h2 {
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+ color: #611618;
+}
+.sheet-kob-wrapper .sheet-kob-body__tropes textarea {
+ min-height: 15em;
+ height: 100%;
+}
+.sheet-kob-wrapper .sheet-kob-characteristics, .sheet-kob-wrapper .sheet-kob-characteristics__general, .sheet-kob-wrapper .sheet-kob-characteristics__wand, .sheet-kob-wrapper .sheet-kob-characteristics__broom, .sheet-kob-wrapper .sheet-kob-characteristics__other {
+ padding: 0.5em;
+ font-variant: small-caps;
+}
+.sheet-kob-wrapper .sheet-kob-characteristics h3, .sheet-kob-wrapper .sheet-kob-characteristics__general h3, .sheet-kob-wrapper .sheet-kob-characteristics__wand h3, .sheet-kob-wrapper .sheet-kob-characteristics__broom h3, .sheet-kob-wrapper .sheet-kob-characteristics__other h3 {
+ grid-column: 1/-1;
+}
+.sheet-kob-wrapper .sheet-kob-characteristics h3:after, .sheet-kob-wrapper .sheet-kob-characteristics__general h3:after, .sheet-kob-wrapper .sheet-kob-characteristics__wand h3:after, .sheet-kob-wrapper .sheet-kob-characteristics__broom h3:after, .sheet-kob-wrapper .sheet-kob-characteristics__other h3:after {
+ display: inline;
+ content: ":";
+}
+.sheet-kob-wrapper .sheet-kob-characteristics__general {
+ display: grid;
+ grid-template-columns: 1fr 3fr;
+}
+.sheet-kob-wrapper .sheet-kob-characteristics__wand {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+}
+.sheet-kob-wrapper .sheet-kob-characteristic {
+ grid-column: 1/-1;
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin-bottom: 0.25em;
+}
+.sheet-kob-wrapper .sheet-kob-characteristic__label {
+ flex-shrink: 0;
+ margin-right: 1em;
+ font-size: 10pt;
+ font-weight: bold;
+}
+.sheet-kob-wrapper .sheet-kob-characteristic__label:after {
+ display: inline;
+ content: ":";
+}
+.sheet-kob-wrapper .sheet-kob-characteristic__select, .sheet-kob-wrapper .sheet-kob-characteristic__input[type=number], .sheet-kob-wrapper .sheet-kob-characteristic__input[type=text] {
+ flex-grow: 1;
+ min-width: 0;
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ border-bottom: 1px solid #000;
+ border-radius: 0;
+}
+.sheet-kob-wrapper .sheet-kob-characteristic--age, .sheet-kob-wrapper .sheet-kob-characteristic--pronouns, .sheet-kob-wrapper .sheet-kob-characteristic--wood, .sheet-kob-wrapper .sheet-kob-characteristic--core {
+ grid-column: span 1;
+}
+.sheet-kob-wrapper .sheet-kob-characteristic--core, .sheet-kob-wrapper .sheet-kob-characteristic--pronouns {
+ margin-left: 0.5em;
+}
+.sheet-kob-wrapper .sheet-kob-flaw, .sheet-kob-wrapper .sheet-kob-strength {
+ padding-top: 0.5em;
+ margin-top: 0.5em;
+ border-top: 2px solid #000;
+}
+.sheet-kob-wrapper .sheet-kob-flaw__wrapper, .sheet-kob-wrapper .sheet-kob-strength__wrapper {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin-bottom: 1em;
+}
+.sheet-kob-wrapper .sheet-kob-flaw__wrapper--text, .sheet-kob-wrapper .sheet-kob-strength__wrapper--text {
+ display: grid;
+}
+.sheet-kob-wrapper .sheet-kob-flaw__label, .sheet-kob-wrapper .sheet-kob-strength__label {
+ flex-shrink: 0;
+ font-size: 10pt;
+ font-variant: small-caps;
+}
+.sheet-kob-wrapper .sheet-kob-flaw__label:after, .sheet-kob-wrapper .sheet-kob-strength__label:after {
+ display: inline;
+ content: ":";
+}
+.sheet-kob-wrapper .sheet-kob-flaw__input[type=text], .sheet-kob-wrapper .sheet-kob-strength__input[type=text] {
+ flex-grow: 1;
+ min-width: 0;
+ width: 100%;
+ margin: 0;
+ margin-left: 1em;
+ padding: 0;
+ border: 0;
+ border-bottom: 1px solid #000;
+ border-radius: 0;
+}
+.sheet-kob-wrapper .sheet-kob-flaw__textarea, .sheet-kob-wrapper .sheet-kob-strength__textarea {
+ height: 5em;
+}
+.sheet-kob-wrapper .sheet-kob-stat {
+ display: grid;
+ align-items: stretch;
+}
+.sheet-kob-wrapper .sheet-kob-stat:nth-child(even) {
+ grid-template-columns: 2.5em 1fr;
+}
+.sheet-kob-wrapper .sheet-kob-stat:nth-child(even) button {
+ transform: rotate(180deg);
+}
+.sheet-kob-wrapper .sheet-kob-stat:nth-child(odd) {
+ grid-template-columns: 1fr 2.5em;
+}
+.sheet-kob-wrapper .sheet-kob-stat:nth-child(odd) button {
+ grid-row: 1;
+ grid-column: 2;
+}
+.sheet-kob-wrapper .sheet-kob-stat * {
+ border: 0;
+ border-radius: 0;
+ background-color: transparent;
+}
+.sheet-kob-wrapper .sheet-kob-stat__wrapper {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 0.5em;
+ padding: 0.5em;
+ border: 1px solid #000;
+}
+.sheet-kob-wrapper .sheet-kob-stat__select {
+ grid-column: 1/-1;
+ min-width: 0;
+ width: 100%;
+ height: 3em;
+ margin: 0;
+ padding: 0;
+ padding-left: calc(50% - 1.25em);
+ border-bottom: 2px solid #000;
+ background-position-x: right 10px;
+ font-size: 14pt;
+ font-weight: bold;
+ text-align: left;
+}
+.sheet-kob-wrapper .sheet-kob-stat__button {
+ line-height: 1em;
+ border: 1px solid transparent;
+ color: #611618;
+ background: transparent;
+ font-size: 12pt;
+ font-weight: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ writing-mode: vertical-lr;
+}
+.sheet-kob-wrapper .sheet-kob-stat__button:before {
+ margin-bottom: 5px;
+}
+.sheet-kob-wrapper .sheet-kob-stat__button:hover {
+ background: #611618;
+ color: #fff;
+}
+.sheet-kob-wrapper .sheet-kob-stat__label {
+ max-width: 100%;
+ padding: 0;
+ margin: 0;
+ font-size: 7pt;
+ font-weight: bold;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-kob-wrapper .sheet-kob-stat__input {
+ min-width: 0;
+ width: 100%;
+ border-bottom: 1px solid #000;
+ text-align: center;
+}
+.sheet-kob-wrapper .sheet-kob-adversity__input[type=number] {
+ width: 100%;
+ border: 1px solid #000;
+ border-radius: 0;
+ font-size: 16pt;
+}
+
+.sheet-rolltemplate-kobrooms {
+ background: url("https://s3.amazonaws.com/files.d20.io/images/138445853/9o33D5SoZ3MkIHqP8tZWNA/max.png?1590524256") center/100%;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container {
+ display: block;
+ padding: 1em;
+ border: 1px solid #611618;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container h1 {
+ color: #611618;
+ border-bottom: 2px solid #611618;
+ font-family: "Chelsea Market", serif;
+ font-size: 14pt;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container h2 {
+ font-family: "Montserrat", sans-serif;
+ font-size: 12pt;
+ text-align: center;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result {
+ margin-top: 1em;
+ font-family: "Chelsea Market", serif;
+ font-size: 14pt;
+ text-align: center;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result .importantroll,
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result .fullcrit,
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result .fullfail,
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result .inlinerollresult {
+ border: none;
+ background: transparent;
+ font-family: inherit;
+ line-height: 1em;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result .importantroll {
+ color: #3e7bff;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result .fullcrit {
+ color: #4cc016;
+}
+.sheet-rolltemplate-kobrooms .sheet-kobroom-container .sheet-kobroom-roll-result .fullfail {
+ color: #900;
+}
diff --git a/Kids on Brooms Official/kobrooms.html b/Kids on Brooms Official/kobrooms.html
new file mode 100644
index 0000000000..0f40314ce7
--- /dev/null
+++ b/Kids on Brooms Official/kobrooms.html
@@ -0,0 +1,236 @@
+
+
+
+
+
+
+
+
Strengths
You start with your 'grade Strength' and two more.
+
+
+
+
Flaws
+
+
+
+
+
+
+
Adversity Tokens
Begin the game with 3 adversity tokens. Add 1 each time you fail a roll.
+
+
+
+
Trope Questions
Share these answers with the GM.
+
+
+
+
+
+
+ {{#name}}
+
{{name}}
{{/name}}
+
{{#character_name}}
+
{{character_name}}
{{/character_name}}
+ {{#roll}}
+
Result: {{roll}}
{{/roll}}
+
+
+
\ No newline at end of file
diff --git a/Kids on Brooms Official/kobrooms.png b/Kids on Brooms Official/kobrooms.png
new file mode 100644
index 0000000000..95b661a00b
Binary files /dev/null and b/Kids on Brooms Official/kobrooms.png differ
diff --git a/Kids on Brooms Official/sheet.json b/Kids on Brooms Official/sheet.json
new file mode 100644
index 0000000000..96a07bddd0
--- /dev/null
+++ b/Kids on Brooms Official/sheet.json
@@ -0,0 +1,8 @@
+{
+ "html": "kobrooms.html",
+ "css": "kobrooms.css",
+ "authors": "Nic B.",
+ "roll20userid": "45398",
+ "preview": "kobrooms.png",
+ "instructions": "Official Kids on Brooms by Hunters Entertainment"
+}
\ No newline at end of file
diff --git a/Kids on Brooms Official/src/pug/kobrooms.pug b/Kids on Brooms Official/src/pug/kobrooms.pug
new file mode 100644
index 0000000000..a539f2cba4
--- /dev/null
+++ b/Kids on Brooms Official/src/pug/kobrooms.pug
@@ -0,0 +1,71 @@
+include mixins.pug
+
+.kob-wrapper
+ .kob-header
+ .kob-header__logo
+ img(src="https://s3.amazonaws.com/files.d20.io/images/140339639/LGuCR6kY6ZAJ2kvwgkn41Q/max.png?1591123417")
+ input.kob-header__trope(data-i18n-placeholder="Trope", name="attr_trope", placeholder="Trope", type="text")
+ .kob-body
+ .kob-body__leftcol
+ .kob-body__character
+ .kob-characteristics__general
+ each characteristic in ["Character Name", "Age","Pronouns","Fear","Motivation","Description"]
+ - const attr = characteristic.toLowerCase().replace(/ /g, "_");
+ +characteristic-display(characteristic, attr)
+ +select-display("Grade", "grade", ["Underclass", "Upperclass", "Faculty"])
+ .kob-characteristics__broom
+ h3(data-i18n="Your Broom") Your Broom
+ each characteristic in ["Name", "Look","Mechanical Benefit"]
+ - const attr = characteristic.toLowerCase().replace(/ /g, "_");
+ +characteristic-display(characteristic, attr)
+ .kob-characteristics__wand
+ h3(data-i18n="Your Wand") Your Wand
+ each characteristic in ["Wood","Core"]
+ - const attr = characteristic.toLowerCase().replace(/ /g, "_");
+ +characteristic-display(characteristic, attr)
+ .kob-characteristics__other
+ each characteristic in ["Animal Familiar"]
+ - const attr = characteristic.toLowerCase().replace(/ /g, "_");
+ +characteristic-display(characteristic, attr)
+ label.kob-characteristic--textarea(class=`kob-characteristic--school_bag`)
+ strong.kob-characteristic__label(data-i18n="Schoolbag") Schoolbag
+ textarea.kob-characteristic__textarea(name=`attr_school_bag`)
+ .kob-body__strengths
+ h2(data-i18n="Strengths") Strengths
+ span.kob-body__subtext(data-i18n=`You start with your 'grade Strength' and two more.`) You start with your 'grade Strength' and two more.
+ fieldset(class="repeating_strengths")
+ .kob-strength
+ .kob-strength__wrapper
+ strong.kob-strength__label(data-i18n="Strength Name") Strength Name
+ input.kob-strength__input(name="attr_strength_name", type="text")
+ .kob-strength__wrapper--text
+ strong.kob-strength__label(data-i18n="Strength Effects") Strength Effects
+ textarea.kob-strength__textarea(name="attr_strength_description")
+ .kob-body__flaws
+ h2(data-i18n="Flaws") Flaws
+ fieldset(class="repeating_flaws")
+ .kob-flaw
+ .kob-flaw__wrapper
+ strong.kob-flaw__label(data-i18n="Flaw Name") Flaw Name
+ input.kob-flaw__input(name="attr_flaw_name", type="text")
+ .kob-flaw__wrapper
+ strong.kob-flaw__label(data-i18n="Flaw Effects") Flaw Effects
+ textarea.kob-flaw__textarea(name="attr_flaw_description")
+ .kob-body__rightcol
+ .kob-body__stats
+ h2(data-i18n="Stats") Stats
+ each stat in ["Fight", "Flight", "Brains", "Brawn", "Charm", "Grit"]
+ - const attr = stat.toLowerCase().replace(/ /g, "_");
+ +stat-display(stat, attr)
+ .kob-body__adversity
+ h2(data-i18n="Adversity Tokens") Adversity Tokens
+ span.kob-body__subtext(data-i18n=`Begin the game with 3 adversity tokens. Add 1 each time you fail a roll.`) Begin the game with 3 adversity tokens. Add 1 each time you fail a roll.
+ label.kob-adversity
+ input.kob-adversity__input(name=`attr_adversity`, type="number", value="3")
+ .kob-body__tropes
+ h2(data-i18n="Trope Questions") Trope Questions
+ span.kob-body__subtext(data-i18n=`Share these answers with the GM.`) Share these answers with the GM.
+ label.kob-tropes
+ textarea.kob-tropes__textarea(name=`attr_tropes`)
+
+include rolltemplates.pug
\ No newline at end of file
diff --git a/Kids on Brooms Official/src/pug/mixins.pug b/Kids on Brooms Official/src/pug/mixins.pug
new file mode 100644
index 0000000000..5e4143a837
--- /dev/null
+++ b/Kids on Brooms Official/src/pug/mixins.pug
@@ -0,0 +1,37 @@
+mixin characteristic-display(name, attr)
+ label.kob-characteristic(class=`kob-characteristic--${attr}`)
+ strong.kob-characteristic__label(data-i18n=name)=name
+ input.kob-characteristic__input(name=`attr_${attr}`, type="text")
+
+mixin select-display(name, attr, options)
+ label.kob-characteristic(class=`kob-characteristic--${attr}`)
+ strong.kob-characteristic__label(data-i18n=name)=name
+ select.kob-characteristic__select(name=`attr_${attr}`, type="text")
+ each option in options
+ - const val = option.toLowerCase();
+ option(data-i18n=option, value=val)=option
+
+mixin stat-display(name, attr)
+ -
+ const roll = [
+ `&{template:kobrooms}`,
+ `{{name=${name}}}`,
+ `{{character_name=@{character_name}}}`,
+ `{{roll=[[1@{${attr}}!+?{Bonus|Stat,@{${attr}_stat}|Magic,@{${attr}_magic}|None,0}+?{Bonuses / Penalties|0}]]}}`,
+ ].join(" ");
+ .kob-stat
+ button.kob-stat__button(data-i18n=name, name=`roll_${attr}`, type="roll", value=roll)=name
+ .kob-stat__wrapper
+ select.kob-stat__select(name=`attr_${attr}`)
+ +dice-select()
+ label.kob-stat__label
+ input.kob-stat__input(name=`attr_${attr}_stat`, type="text", value="0")
+ span.kob-stat__tag(data-i18n="Stat") Stat
+ label.kob-stat__label
+ input.kob-stat__input(name=`attr_${attr}_magic`, type="text", value="0")
+ span.kob-stat__tag(data-i18n="Magic") Magic
+
+mixin dice-select(selected)
+ - const dice = ["d4", "d6", "d8", "d10", "d12", "d20"];
+ each die in dice
+ option(data-i18n=die value=die selected=(die == selected))=die
\ No newline at end of file
diff --git a/Kids on Brooms Official/src/pug/rolltemplates.pug b/Kids on Brooms Official/src/pug/rolltemplates.pug
new file mode 100644
index 0000000000..08df514497
--- /dev/null
+++ b/Kids on Brooms Official/src/pug/rolltemplates.pug
@@ -0,0 +1,13 @@
+rolltemplate.sheet-rolltemplate-kobrooms
+ .sheet-kobroom-container
+ | {{#name}}
+ h1 {{name}}
+ | {{/name}}
+ .sheet-kobroom-body
+ | {{#character_name}}
+ h2 {{character_name}}
+ | {{/character_name}}
+ | {{#roll}}
+ .sheet-kobroom-roll-result
+ | Result: {{roll}}
+ | {{/roll}}
\ No newline at end of file
diff --git a/Kids on Brooms Official/src/scss/kobrooms.scss b/Kids on Brooms Official/src/scss/kobrooms.scss
new file mode 100644
index 0000000000..2307ef72f1
--- /dev/null
+++ b/Kids on Brooms Official/src/scss/kobrooms.scss
@@ -0,0 +1,552 @@
+@import url('https://fonts.googleapis.com/css?family=Chelsea+Market|Montserrat:400&display=swap');
+
+.sheet-kob-wrapper {
+ padding: 1em 3em;
+
+ background: url("https://s3.amazonaws.com/files.d20.io/images/140339579/OXUcAr8mw0JvS2Ejs7Fj8Q/med.png?1591123400") center/cover;
+
+ font-family: "Chelsea Market", serif;
+ font-size: 10pt;
+
+ * {
+ box-sizing: border-box;
+ }
+
+ input {
+ height: 1.75em;
+ }
+
+ input[type="number"] {
+ -moz-appearance: textfield;
+
+ text-align: center;
+
+ &::-webkit-outer-spin-button,
+ &::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+ }
+ }
+
+ input[type="number"],
+ input[type="text"],
+ textarea,
+ select {
+ background-color: transparent;
+
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 12pt;
+ font-variant: normal;
+
+ &:hover {
+ background-color: rgba(0,0,0,0.125);
+ }
+ }
+
+ select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+
+ height: 1.75em;
+
+ cursor: pointer;
+
+ background: transparent url("https://s3.amazonaws.com/files.d20.io/images/138210258/mZTqw1vke8SrkprMJmiZQw/med.png?1590443723") right 5px center no-repeat;
+ }
+
+ textarea {
+ resize: vertical;
+ width: 100%;
+
+ border: 1px solid #000;
+ border-radius: 0;
+ }
+
+ label {
+ padding: 0;
+ margin: 0;
+ }
+
+ .itemcontrol {
+ position: relative;
+
+ button.repcontrol_del,
+ a.repcontrol_move {
+ display: block;
+ top: calc(50% - 1.5rem);
+ position: relative;
+ border: 1px solid #000;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+ box-shadow: none;
+
+ line-height: 2em;
+ text-shadow: none;
+
+ font-weight: bold;
+ }
+
+ button.repcontrol_del {
+ margin-right: .25rem;
+
+ background: #a00;
+ color: #fff;
+ }
+
+ a.repcontrol_move {
+ margin-left: .25rem;
+
+ background: transparent;
+ color: #000;
+ }
+
+ }
+
+ .repcontrol {
+ padding: .25em;
+
+ background-color: transparent;
+
+ button.repcontrol_add,
+ button.repcontrol_del,
+ button.repcontrol_move,
+ button.repcontrol_edit {
+ display: block;
+ border: 1px solid #000;
+ border-radius: 0;
+ background: none;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+ box-shadow: none;
+
+ font-size: 0;
+ line-height: 1em;
+ text-shadow: none;
+ }
+
+ button.repcontrol_add:before {
+ display: block;
+ content: "&";
+
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ button.repcontrol_edit {
+ &:before {
+ display: block;
+ content: "p";
+ right: 5px;
+
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+ }
+ }
+ }
+
+ .sheet-kob {
+
+ &-header {
+ display: grid;
+ grid-template-columns: 1fr 2fr;
+ gap: 1.5em;
+
+ margin-bottom: 1.5em;
+
+ &__logo {
+ height: 50px;
+ }
+
+ &__trope[type="text"] {
+ width: 100%;
+ padding: .25em;
+
+ border: 2px solid #000;
+ border-radius: 0;
+ background: transparent;
+
+ font-size: 24pt;
+ text-align: center;
+ }
+ }
+
+ &-body {
+ display: grid;
+ grid-template-columns: 2fr 1.25fr;
+ gap: 1.5em;
+
+ &__strengths,
+ &__flaws,
+ &__stats,
+ &__adversity,
+ &__tropes,
+ &__character {
+ padding: 1.25em 1.25em;
+ margin-bottom: 1.5em;
+
+ background:
+ url("https://s3.amazonaws.com/files.d20.io/images/140337271/wJZvx5ua03bzSc0DViK_YA/med.png?1591122772") top left/40px no-repeat,
+ url("https://s3.amazonaws.com/files.d20.io/images/140337272/8TEVnItbqmvdXka2UVLulw/med.png?1591122772") top right/40px no-repeat,
+ url("https://s3.amazonaws.com/files.d20.io/images/140337270/uKtXcumLfN1rNOl0EaBGKA/med.png?1591122772") bottom left/40px no-repeat,
+ url("https://s3.amazonaws.com/files.d20.io/images/140337273/RPhav9hWTnUy4Sd0jwqq6A/med.png?1591122772") bottom right/40px no-repeat;
+
+ border: 2px solid #000;
+ }
+
+ &__stats {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+
+ h2 {
+ grid-column: 1 / -1;
+ }
+ }
+
+ &__subtext {
+ display: block;
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 11pt;
+ text-align: center;
+ }
+
+ &__flaws,
+ &__strengths {
+ .repcontrol {
+ margin-top: 4em;
+
+ border-top: 2px solid #000;
+ }
+ }
+
+ h2 {
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+
+ color: #611618;
+ }
+
+ &__tropes {
+
+ textarea {
+ min-height: 15em;
+ height: 100%;
+ }
+ }
+ }
+
+ &-characteristics {
+ padding: .5em;
+
+ font-variant: small-caps;
+
+ h3 {
+ grid-column: 1 / -1;
+
+ &:after {
+ display: inline;
+ content: ":";
+ }
+ }
+
+ &__general,
+ &__wand,
+ &__broom,
+ &__other {
+ @extend .sheet-kob-characteristics;
+ }
+
+ &__general {
+ display: grid;
+ grid-template-columns: 1fr 3fr;
+ }
+
+ &__wand {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ }
+ }
+
+ &-characteristic {
+ grid-column: 1 / -1;
+
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+
+ margin-bottom: .25em;
+
+ &__label {
+ flex-shrink: 0;
+ margin-right: 1em;
+ font-size: 10pt;
+ font-weight: bold;
+
+ &:after {
+ display: inline;
+ content: ":";
+ }
+ }
+
+ &__select,
+ &__input[type=number],
+ &__input[type=text] {
+ flex-grow: 1;
+
+ min-width: 0;
+ width: 100%;
+
+ margin: 0;
+ padding: 0;
+
+ border: 0;
+ border-bottom: 1px solid #000;
+ border-radius: 0;
+ }
+
+ &--age,
+ &--pronouns,
+ &--wood,
+ &--core {
+ grid-column: span 1;
+ }
+
+ &--core,
+ &--pronouns {
+ margin-left: .5em;
+ }
+
+ }
+
+ &-flaw,
+ &-strength {
+ padding-top: .5em;
+ margin-top: .5em;
+ border-top: 2px solid #000;
+
+ &__wrapper {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin-bottom: 1em;
+
+ &--text {
+ display: grid;
+ }
+ }
+
+ &__label {
+ flex-shrink: 0;
+
+ font-size: 10pt;
+ font-variant: small-caps;
+
+ &:after {
+ display: inline;
+ content: ":";
+ }
+ }
+
+ &__input[type=text] {
+ flex-grow: 1;
+ min-width: 0;
+ width: 100%;
+
+ margin: 0;
+ margin-left: 1em;
+ padding: 0;
+
+ border: 0;
+ border-bottom: 1px solid #000;
+ border-radius: 0;
+ }
+
+ &__textarea {
+ height: 5em;
+ }
+
+
+ }
+
+ &-stat {
+ display: grid;
+ align-items: stretch;
+
+
+ &:nth-child(even) {
+ grid-template-columns: 2.5em 1fr;
+
+ button {
+ transform: rotate(180deg);
+ }
+ }
+
+ &:nth-child(odd) {
+ grid-template-columns: 1fr 2.5em;
+
+ button {
+ grid-row: 1;
+ grid-column: 2;
+ }
+ }
+
+ * {
+ border: 0;
+ border-radius: 0;
+ background-color: transparent;
+ }
+
+ &__wrapper {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: .5em;
+ padding: .5em;
+
+ border: 1px solid #000;
+ }
+
+ &__select {
+ grid-column: 1 / -1;
+
+ min-width: 0;
+ width: 100%;
+ height: 3em;
+ margin: 0;
+ padding: 0;
+ padding-left: calc(50% - 1.25em);
+
+ border-bottom: 2px solid #000;
+ background-position-x: right 10px;
+
+ font-size: 14pt;
+ font-weight: bold;
+ text-align: left;
+ }
+
+ &__button {
+ line-height: 1em;
+
+ border: 1px solid transparent;
+ color: #611618;
+ background: transparent;
+
+ font-size: 12pt;
+ font-weight: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ writing-mode: vertical-lr;
+
+ &:before {
+ margin-bottom: 5px;
+ }
+
+ &:hover {
+ background: #611618;
+ color: #fff;
+ }
+ }
+
+ &__label {
+ max-width:100%;
+ padding: 0;
+ margin: 0;
+
+ font-size: 7pt;
+ font-weight: bold;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ &__input {
+ min-width: 0;
+ width: 100%;
+
+ border-bottom: 1px solid #000;
+
+ text-align: center;
+ }
+
+ }
+
+ &-adversity {
+
+ &__input[type="number"] {
+ width: 100%;
+
+ border: 1px solid #000;
+ border-radius: 0;
+
+ font-size: 16pt;
+ }
+
+ }
+
+ }
+
+}
+
+.sheet-rolltemplate-kobrooms {
+ background: url("https://s3.amazonaws.com/files.d20.io/images/138445853/9o33D5SoZ3MkIHqP8tZWNA/max.png?1590524256") center/100%;
+
+ .sheet-kobroom-container {
+ display: block;
+ padding: 1em;
+ border: 1px solid #611618;
+
+ h1 {
+ color: #611618;
+ border-bottom: 2px solid #611618;
+
+ font-family: "Chelsea Market", serif;
+ font-size: 14pt;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ h2 {
+ font-family: "Montserrat", sans-serif;
+ font-size: 12pt;
+ text-align: center;
+ }
+
+ .sheet-kobroom-roll-result {
+ margin-top: 1em;
+
+ font-family: "Chelsea Market", serif;
+ font-size: 14pt;
+ text-align: center;
+
+ .importantroll,
+ .fullcrit,
+ .fullfail,
+ .inlinerollresult {
+ border: none;
+ background: transparent;
+
+ font-family: inherit;
+ line-height: 1em;
+ }
+
+ .importantroll {
+ color: #3e7bff;
+ }
+
+ .fullcrit {
+ color: #4cc016;
+ }
+
+ .fullfail {
+ color: #900;
+ }
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Kids on Brooms Official/translation.json b/Kids on Brooms Official/translation.json
new file mode 100644
index 0000000000..cb9fa8d991
--- /dev/null
+++ b/Kids on Brooms Official/translation.json
@@ -0,0 +1,48 @@
+{
+ "Trope":"Trope",
+ "Character Name":"Character Name",
+ "Age":"Age",
+ "Pronouns":"Pronouns",
+ "Fear":"Fear",
+ "Motivation":"Motivation",
+ "Description":"Description",
+ "Grade":"Grade",
+ "Underclass":"Underclass",
+ "Upperclass":"Upperclass",
+ "Faculty":"Faculty",
+ "Your Broom":"Your Broom",
+ "Look":"Look",
+ "Mechanical Benefit":"Mechanical Benefit",
+ "Your Wand":"Your Wand",
+ "Wood":"Wood",
+ "Core":"Core",
+ "Animal Familiar":"Animal Familiar",
+ "Schoolbag":"Schoolbag",
+ "Strengths":"Strengths",
+ "You start with your 'grade Strength' and two more.":"You start with your 'grade Strength' and two more.",
+ "Strength Name":"Strength Name",
+ "Strength Effects":"Strength Effects",
+ "Flaws":"Flaws",
+ "Flaw Name":"Flaw Name",
+ "Flaw Effects":"Flaw Effects",
+ "d4":"d4",
+ "d6":"d6",
+ "d8":"d8",
+ "d10":"d10",
+ "d12":"d12",
+ "d20":"d20",
+ "Adversity Tokens":"Adversity Tokens",
+ "Begin the game with 3 adversity tokens. Add 1 each time you fail a roll.":"Begin the game with 3 adversity tokens. Add 1 each time you fail a roll.",
+ "Trope Questions":"Trope Questions",
+ "Share these answers with the GM.":"Share these answers with the GM.",
+ "Fight":"Fight",
+ "Flight":"Flight",
+ "Brains":"Brains",
+ "Brawn":"Brawn",
+ "Charm":"Charm",
+ "Grit":"Grit",
+ "Stats":"Stats",
+ "Stat":"Stat",
+ "Magic":"Magic",
+ "Name":"Name"
+}
\ No newline at end of file