diff --git a/Altered Carbon Official/altered-carbon.css b/Altered Carbon Official/altered-carbon.css
new file mode 100644
index 0000000000..6a7a4df33c
--- /dev/null
+++ b/Altered Carbon Official/altered-carbon.css
@@ -0,0 +1,877 @@
+@import url("https://fonts.googleapis.com/css?family=Montserrat:200|Montserrat:400|Montserrat:600|Montserrat:700|Montserrat:800|Montserrat:900&display=swap");
+.sheet-ac-wrapper {
+ background: white;
+ color: black;
+ font-family: Montserrat, sans-serif;
+ font-size: 10pt;
+}
+.sheet-ac-wrapper * {
+ box-sizing: border-box;
+}
+.sheet-ac-wrapper input {
+ height: 1.75em;
+}
+.sheet-ac-wrapper input[type=number] {
+ -moz-appearance: textfield;
+ text-align: center;
+}
+.sheet-ac-wrapper input[type=number]::-webkit-outer-spin-button, .sheet-ac-wrapper input[type=number]::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+.sheet-ac-wrapper input[type=number],
+.sheet-ac-wrapper input[type=text],
+.sheet-ac-wrapper textarea,
+.sheet-ac-wrapper select {
+ min-width: 0;
+ width: 100%;
+ border-radius: 0;
+ background-color: transparent;
+ color: black;
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 10pt;
+ font-variant: normal;
+}
+.sheet-ac-wrapper input[type=number]:hover,
+.sheet-ac-wrapper input[type=text]:hover,
+.sheet-ac-wrapper textarea:hover,
+.sheet-ac-wrapper select:hover {
+ border: 1px solid #38e0d5;
+ box-shadow: 0 0 5px #38e0d5;
+}
+.sheet-ac-wrapper button:hover {
+ border: 1px solid #38e0d5;
+ box-shadow: 0 0 5px #38e0d5;
+}
+.sheet-ac-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-ac-wrapper textarea {
+ resize: vertical;
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ border-radius: 0;
+}
+.sheet-ac-wrapper label {
+ padding: 0;
+ margin: 0;
+}
+.sheet-ac-wrapper .itemcontrol {
+ position: relative;
+}
+.sheet-ac-wrapper .itemcontrol button.repcontrol_del,
+.sheet-ac-wrapper .itemcontrol a.repcontrol_move {
+ display: block;
+ top: calc(50% - 1.5rem);
+ position: relative;
+ border: 1px solid black;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+ box-shadow: none;
+ line-height: 2em;
+ text-shadow: none;
+ font-weight: bold;
+}
+.sheet-ac-wrapper .itemcontrol button.repcontrol_del:hover,
+.sheet-ac-wrapper .itemcontrol a.repcontrol_move:hover {
+ border: 1px solid #38e0d5;
+ box-shadow: 0 0 5px #38e0d5;
+}
+.sheet-ac-wrapper .itemcontrol button.repcontrol_del {
+ margin-right: 0.25rem;
+ background: transparent;
+ border: 1px solid #d2232a;
+ color: #d2232a;
+}
+.sheet-ac-wrapper .itemcontrol button.repcontrol_del:hover {
+ border: 1px solid #d2232a;
+ box-shadow: 0 0 5px #d2232a;
+}
+.sheet-ac-wrapper .itemcontrol a.repcontrol_move {
+ margin-left: 0.25rem;
+ background: transparent;
+ color: black;
+}
+.sheet-ac-wrapper .itemcontrol a.repcontrol_move:hover {
+ border: 1px solid #38e0d5;
+ box-shadow: 0 0 5px #38e0d5;
+}
+.sheet-ac-wrapper .repcontrol {
+ padding: 0.25em;
+ background-color: transparent;
+}
+.sheet-ac-wrapper .repcontrol button.repcontrol_add,
+.sheet-ac-wrapper .repcontrol button.repcontrol_del,
+.sheet-ac-wrapper .repcontrol button.repcontrol_move,
+.sheet-ac-wrapper .repcontrol button.repcontrol_edit {
+ display: block;
+ border: 1px solid black;
+ 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-ac-wrapper .repcontrol button.repcontrol_add:hover,
+.sheet-ac-wrapper .repcontrol button.repcontrol_del:hover,
+.sheet-ac-wrapper .repcontrol button.repcontrol_move:hover,
+.sheet-ac-wrapper .repcontrol button.repcontrol_edit:hover {
+ border: 1px solid #38e0d5;
+ box-shadow: 0 0 5px #38e0d5;
+}
+.sheet-ac-wrapper .repcontrol button.repcontrol_add:before {
+ display: block;
+ content: "&";
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+}
+.sheet-ac-wrapper .repcontrol button.repcontrol_edit:before {
+ display: block;
+ content: "p";
+ right: 5px;
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+}
+.sheet-ac-wrapper h1 {
+ font-size: 16pt;
+ font-weight: 700;
+ letter-spacing: 2px;
+ text-align: center;
+ text-transform: uppercase;
+}
+
+.sheet-ac-trait__label, .sheet-ac-header__label {
+ font-weight: 400;
+ text-transform: uppercase;
+}
+
+.sheet-ac-stat__value input[type=number], .sheet-ac-stat__header input[type=number], [type=number].sheet-ac-header__input, .sheet-ac-stat__value input[type=text], .sheet-ac-stat__header input[type=text], [type=text].sheet-ac-header__input {
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+.sheet-ac-header {
+ padding: 1em;
+ background: linear-gradient(164deg, #042938 0%, #031f27 100%);
+ background-color: #042938;
+ color: white;
+}
+.sheet-ac-header__grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 0 1em;
+}
+.sheet-ac-header__item, .sheet-ac-header__item--subitem {
+ grid-column: span 2;
+}
+.sheet-ac-header__item--subitem {
+ grid-column: span 1;
+}
+.sheet-ac-header__label {
+ font-family: 12pt;
+}
+.sheet-ac-header__input[type=number], .sheet-ac-header__input[type=text] {
+ border: 1px solid transparent;
+ border-bottom: 1px solid white;
+ color: white !important;
+ font-size: 12pt !important;
+ font-weight: 800 !important;
+ text-transform: uppercase;
+}
+.sheet-ac-nav {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+}
+.sheet-ac-nav > label {
+ margin: 5px;
+}
+.sheet-ac-nav__item {
+ width: auto;
+ padding: 5px;
+ cursor: pointer;
+ font-size: 11pt;
+ font-weight: 600;
+ text-transform: uppercase;
+}
+.sheet-ac-nav__label {
+ padding: 0 5px;
+ border-radius: 3px;
+ border: 1px solid black;
+}
+.sheet-ac-nav__label:hover {
+ border: 1px solid #38e0d5;
+ box-shadow: 0 0 5px #38e0d5;
+}
+.sheet-ac-nav__hide {
+ display: none;
+}
+.sheet-ac-nav input[type=radio]:checked + .sheet-ac-nav__label {
+ border: 1px solid #00a99d;
+ background: rgba(0, 169, 157, 0.15);
+ color: #00a99d;
+}
+.sheet-ac-body__stats {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 1em;
+}
+.sheet-ac-body__traits {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ margin: 1em 0;
+ padding: 1em 1em;
+ background-color: #042938;
+ background: linear-gradient(164deg, #042938 0%, #031f27 100%);
+ color: white;
+}
+.sheet-ac-body__traits .itemcontrol button.repcontrol_del,
+.sheet-ac-body__traits .itemcontrol a.repcontrol_move {
+ border: 1px solid white;
+ color: white;
+}
+.sheet-ac-body__traits .itemcontrol a.repcontrol_move {
+ color: white;
+}
+.sheet-ac-body__traits .repcontrol {
+ margin-bottom: 1em;
+}
+.sheet-ac-body__traits .repcontrol button.repcontrol_add,
+.sheet-ac-body__traits .repcontrol button.repcontrol_del,
+.sheet-ac-body__traits .repcontrol button.repcontrol_move,
+.sheet-ac-body__traits .repcontrol button.repcontrol_edit {
+ border: 1px solid white;
+ color: white;
+}
+.sheet-ac-body__misc {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 1em;
+}
+.sheet-ac-stat__header {
+ display: grid;
+ grid-template-columns: 1fr 5em;
+ align-items: center;
+ padding: 0.125em 0.5em;
+ background: #bd9c55;
+ color: white;
+ font-size: 12pt;
+ font-weight: 800;
+ text-transform: uppercase;
+}
+.sheet-ac-stat__title {
+ letter-spacing: 2px;
+}
+.sheet-ac-stat__value {
+ display: grid;
+ grid-template-columns: 1fr 0.75fr;
+ align-items: center;
+ color: white;
+}
+.sheet-ac-stat__value input[type=text], .sheet-ac-stat__value input[type=number] {
+ background: rgba(0, 0, 0, 0.125);
+ color: white;
+ font-size: 14pt;
+ font-weight: 800;
+}
+.sheet-ac-stat__value span {
+ text-align: center;
+ font-weight: 600;
+}
+.sheet-ac-stat__bonus {
+ font-size: 12pt;
+}
+.sheet-ac-stat__bonus:before, .sheet-ac-stat__bonus:after {
+ display: inline;
+}
+.sheet-ac-stat__bonus:before {
+ content: "(";
+}
+.sheet-ac-stat__bonus:after {
+ content: ")";
+}
+.sheet-ac-stat__body {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 0.25em 0;
+}
+.sheet-ac-skill {
+ display: grid;
+ grid-template-columns: 1fr 3.5em;
+ gap: 0;
+ align-items: center;
+}
+.sheet-ac-skill__name[type=roll] {
+ display: flex;
+ flex-grow: 0;
+ align-items: center;
+ border: 0;
+ background: none;
+ font-size: 9pt !important;
+ font-weight: 600;
+ text-align: left;
+ text-transform: uppercase;
+}
+.sheet-ac-skill__name[type=roll]:before {
+ display: none;
+}
+.sheet-ac-skill__name[type=roll]:after {
+ display: block;
+ flex-grow: 1;
+ content: "";
+ height: 0;
+ margin: 0;
+ margin-left: 4px;
+ border-bottom: 3px solid #bd9c55;
+}
+.sheet-ac-skill__name[type=roll]:hover {
+ color: #38e0d5;
+ box-shadow: none !important;
+ border: 0 !important;
+}
+.sheet-ac-skill__name[type=roll]:hover:after {
+ border-color: #38e0d5;
+}
+.sheet-ac-skill__value {
+ margin: 0;
+ padding: 0;
+}
+.sheet-ac-skill__value select {
+ margin: 0 !important;
+ padding: 0;
+ border: 0;
+ font-size: 10pt;
+ line-height: 10pt;
+}
+.sheet-ac-traits {
+ border-right: 1px solid rgba(255, 255, 255, 0.25);
+ padding: 1em;
+}
+.sheet-ac-traits:last-child {
+ border-right: 0;
+}
+.sheet-ac-traits__header {
+ padding: 0.5em;
+ margin-bottom: 0.5em;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-ac-trait {
+ margin-bottom: 1em;
+ border: 1px solid rgba(0, 169, 157, 0.5);
+}
+.sheet-ac-trait__title {
+ display: flex;
+ align-items: center;
+ flex-flow: row nowrap;
+ margin-bottom: 0;
+ padding: 0;
+ border: 1px solid transparent;
+}
+.sheet-ac-trait__title > div {
+ flex-shrink: 0;
+ margin-right: 5px;
+}
+.sheet-ac-trait__title > input {
+ flex-grow: 1;
+ height: 2.5em;
+ background: rgba(0, 0, 40, 0.25) !important;
+ border: 1px solid transparent;
+ border-bottom: 1px solid rgba(0, 169, 157, 0.5);
+ border-radius: 0;
+ color: #38e0d5 !important;
+ font-size: 9pt !important;
+ font-weight: 600 !important;
+}
+.sheet-ac-trait__description {
+ padding: 0;
+}
+.sheet-ac-trait__description textarea {
+ width: 100%;
+ height: 7.5em;
+ padding: 0.25em;
+ margin: 0;
+ border: 1px solid transparent;
+ border-radius: none;
+ background: rgba(0, 0, 40, 0.25);
+ color: white;
+ font-size: 9pt;
+}
+.sheet-ac-networks__header, .sheet-ac-baggage__header {
+ color: #d2232a;
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+}
+.sheet-ac-networks__item, .sheet-ac-baggage__item {
+ display: flex;
+ align-items: center;
+ flex-flow: row nowrap;
+ margin-bottom: 0.5em;
+ border: 0;
+ border-bottom: 1px solid #aaa;
+}
+.sheet-ac-networks__item:before, .sheet-ac-baggage__item:before {
+ display: inline-block;
+ flex-shrink: 0;
+ content: "4";
+ margin-right: 0.25em;
+ color: #00a99d;
+ font-family: "Pictos";
+}
+.sheet-ac-networks__item > input, .sheet-ac-baggage__item > input {
+ flex-grow: 1;
+ border: 0;
+ font-size: 10pt !important;
+}
+.sheet-ac-baggage textarea {
+ height: 4.5em;
+}
+.sheet-ac-baggage__item {
+ align-items: flex-start !important;
+}
+.sheet-ac-baggage__item:before {
+ margin-top: 0.1em;
+}
+.sheet-ac-biometrics__header {
+ color: #d2232a;
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+}
+.sheet-ac-biometrics__container {
+ border: 1px solid #bd9c55;
+ padding: 0.5em;
+}
+.sheet-ac-biometrics__row {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+}
+.sheet-ac-biometrics__row--textarea {
+ margin-top: 0.5em;
+}
+.sheet-ac-biometrics__row--textarea textarea {
+ background: #eee;
+}
+.sheet-ac-biometrics__label {
+ flex-shrink: 0;
+ font-size: 10pt;
+ font-weight: 600;
+ text-transform: uppercase;
+}
+.sheet-ac-biometrics__label:after {
+ display: inline;
+ content: ":";
+ margin-right: 0.5em;
+}
+.sheet-ac-biometrics__input, .sheet-ac-health__input--minmax, .sheet-ac-biometrics__input--minmax {
+ flex-grow: 1;
+ font-size: 10pt;
+ font-weight: 600;
+}
+.sheet-ac-biometrics__input input[type=number], .sheet-ac-health__input--minmax input[type=number], .sheet-ac-biometrics__input--minmax input[type=number],
+.sheet-ac-biometrics__input input[type=text],
+.sheet-ac-health__input--minmax input[type=text],
+.sheet-ac-biometrics__input--minmax input[type=text] {
+ border: 0;
+ border-bottom: 1px solid #aaa;
+}
+.sheet-ac-biometrics__input--minmax {
+ flex-grow: 0;
+ display: grid;
+ grid-template-columns: 1fr 0.5em 1fr;
+ align-items: center;
+ width: 50%;
+}
+.sheet-ac-biometrics textarea {
+ height: 7.5em;
+}
+.sheet-ac-health {
+ margin-top: 2em;
+}
+.sheet-ac-health__label {
+ flex-shrink: 0;
+ font-size: 10pt;
+ font-weight: 600;
+ text-transform: uppercase;
+}
+.sheet-ac-health__label:after {
+ display: inline;
+ content: ":";
+ margin-right: 0.5em;
+}
+.sheet-ac-health__input {
+ flex-grow: 1;
+ font-size: 10pt;
+ font-weight: 600;
+}
+.sheet-ac-health__input input[type=number],
+.sheet-ac-health__input input[type=text] {
+ border: 0;
+ border-bottom: 1px solid #aaa;
+}
+.sheet-ac-health__input--minmax {
+ flex-grow: 0;
+ display: grid;
+ grid-template-columns: 1fr 0.5em 1fr;
+ align-items: center;
+ width: 30%;
+}
+.sheet-ac-health__row {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin-bottom: 0.5em;
+}
+.sheet-ac-health__row--textarea textarea {
+ background: #eee;
+}
+.sheet-ac-equipment {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ align-items: stretch;
+ gap: 1em 0;
+}
+.sheet-ac-equipment > * {
+ padding: 0.75em;
+}
+.sheet-ac-equipment__credits {
+ grid-column: 1/-1;
+}
+.sheet-ac-equipment__header {
+ color: #d2232a;
+ font-size: 14pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-ac-equipment__tools {
+ border-left: 1px dashed #aaa;
+}
+.sheet-ac-credits {
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ gap: 1.5em;
+ align-items: center;
+}
+.sheet-ac-credits__title {
+ color: #d2232a;
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+}
+.sheet-ac-credits__item {
+ display: flex;
+ border: 1px solid #00a99d;
+ border-left: 3px solid #00a99d;
+ border-right: 3px solid #00a99d;
+ font-size: 10pt;
+ font-weight: 600;
+}
+.sheet-ac-credits__item input {
+ border: 0;
+ text-align: center;
+}
+.sheet-ac-credits__label {
+ padding: 0.125em;
+}
+.sheet-ac-credits__input {
+ margin-left: 0.5em;
+}
+.sheet-ac-tool, .sheet-ac-item {
+ margin-bottom: 1.5em;
+ padding: 0.75em;
+ border: 2px solid #00a99d;
+}
+.sheet-ac-tool input, .sheet-ac-item input {
+ flex-shrink: 1;
+ border: 0;
+ width: 100%;
+}
+.sheet-ac-tool__row, .sheet-ac-item__row, .sheet-ac-tool__row--name, .sheet-ac-tool__row--skillchecks, .sheet-ac-item__row--name, .sheet-ac-item__row--skillchecks {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin-bottom: 1em;
+}
+.sheet-ac-tool__row input, .sheet-ac-item__row input, .sheet-ac-tool__row--name input, .sheet-ac-tool__row--skillchecks input, .sheet-ac-item__row--name input, .sheet-ac-item__row--skillchecks input {
+ flex-grow: 1;
+ border-bottom: 1px solid #aaa;
+}
+.sheet-ac-tool__row--bonus, .sheet-ac-item__row--bonus {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ margin-bottom: 1em;
+}
+.sheet-ac-tool__row--checks, .sheet-ac-item__row--checks {
+ display: grid;
+ grid-template-columns: 1fr 1.5fr;
+ margin-bottom: 1em;
+}
+.sheet-ac-tool__row--special, .sheet-ac-item__row--special {
+ display: grid;
+}
+.sheet-ac-tool__label, .sheet-ac-item__label, .sheet-ac-tool__label--name, .sheet-ac-item__label--name {
+ flex-shrink: 0;
+ font-size: 9pt;
+ font-weight: 800;
+}
+.sheet-ac-tool__label:after, .sheet-ac-item__label:after, .sheet-ac-tool__label--name:after, .sheet-ac-item__label--name:after {
+ display: inline;
+ content: ":";
+ margin-right: 0.5em;
+}
+.sheet-ac-tool__label--name, .sheet-ac-item__label--name {
+ color: #d2232a;
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+}
+.sheet-ac-tool__label--small, .sheet-ac-item__label--small {
+ flex-basis: 1.5em;
+ font-weight: 400;
+}
+.sheet-ac-tool__bonus, .sheet-ac-item__bonus {
+ grid-column: span 2;
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+}
+.sheet-ac-tool__checkmarks, .sheet-ac-item__checkmarks {
+ display: grid;
+ grid-template-columns: repeat(10, 1fr);
+}
+.sheet-ac-tool__checkmarks label, .sheet-ac-item__checkmarks label {
+ cursor: pointer;
+}
+.sheet-ac-tool__checkmarks label span, .sheet-ac-item__checkmarks label span {
+ display: block;
+ height: 1em;
+ width: 1em;
+ border-radius: 50%;
+ background-color: rgba(0, 169, 157, 0.125);
+ border: 1px solid #38e0d5;
+}
+.sheet-ac-tool__checkmarks label input[type=radio], .sheet-ac-item__checkmarks label input[type=radio] {
+ display: none;
+}
+.sheet-ac-tool__checkmarks label input[type=radio]:checked + span, .sheet-ac-item__checkmarks label input[type=radio]:checked + span {
+ background-color: #00a99d;
+}
+.sheet-ac-tool__checkmarks label.sheet-ac-checkmark--red span, .sheet-ac-item__checkmarks label.sheet-ac-checkmark--red span {
+ background-color: rgba(210, 35, 42, 0.125);
+ border: 1px solid #d2232a;
+}
+.sheet-ac-tool__checkmarks label.sheet-ac-checkmark--red input[type=radio], .sheet-ac-item__checkmarks label.sheet-ac-checkmark--red input[type=radio] {
+ display: none;
+}
+.sheet-ac-tool__checkmarks label.sheet-ac-checkmark--red input[type=radio]:checked + span, .sheet-ac-item__checkmarks label.sheet-ac-checkmark--red input[type=radio]:checked + span {
+ background-color: #d2232a;
+}
+.sheet-ac-tool__price, .sheet-ac-item__price {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin: 0.25em;
+ padding: 0.25em;
+ border: 1px solid #bd9c55;
+}
+.sheet-ac-tool__price .sheet-ac-tool__label,
+.sheet-ac-tool__price .sheet-ac-item__label,
+.sheet-ac-tool__price .sheet-ac-tool__label--name,
+.sheet-ac-tool__price .sheet-ac-item__label--name, .sheet-ac-item__price .sheet-ac-tool__label,
+.sheet-ac-item__price .sheet-ac-item__label,
+.sheet-ac-item__price .sheet-ac-tool__label--name,
+.sheet-ac-item__price .sheet-ac-item__label--name {
+ font-size: 8pt;
+ font-weight: 400;
+}
+.sheet-ac-tool__price input[type=text], .sheet-ac-item__price input[type=text] {
+ width: 4em;
+}
+.sheet-ac-tool__special textarea, .sheet-ac-item__special textarea {
+ border: 1px solid #aaa;
+ height: 5em;
+}
+.sheet-ac-tool__triggered, .sheet-ac-item__triggered {
+ display: grid;
+ grid-template-columns: 1fr 2fr;
+ align-items: center;
+ gap: 0.5em;
+ width: 100%;
+}
+.sheet-ac-tool__triggered .sheet-ac-item__checkmarks, .sheet-ac-item__triggered .sheet-ac-item__checkmarks {
+ grid-template-columns: repeat(5, 1fr);
+}
+.sheet-ac-tool__special .sheet-ac-tool__label,
+.sheet-ac-tool__special .sheet-ac-item__label,
+.sheet-ac-tool__special .sheet-ac-tool__label--name,
+.sheet-ac-tool__special .sheet-ac-item__label--name, .sheet-ac-tool__triggered .sheet-ac-tool__label,
+.sheet-ac-tool__triggered .sheet-ac-item__label,
+.sheet-ac-tool__triggered .sheet-ac-tool__label--name,
+.sheet-ac-tool__triggered .sheet-ac-item__label--name, .sheet-ac-item__special .sheet-ac-tool__label,
+.sheet-ac-item__special .sheet-ac-item__label,
+.sheet-ac-item__special .sheet-ac-tool__label--name,
+.sheet-ac-item__special .sheet-ac-item__label--name, .sheet-ac-item__triggered .sheet-ac-tool__label,
+.sheet-ac-item__triggered .sheet-ac-item__label,
+.sheet-ac-item__triggered .sheet-ac-tool__label--name,
+.sheet-ac-item__triggered .sheet-ac-item__label--name {
+ grid-column: 1/-1;
+ color: #00a99d;
+ font-size: 10pt;
+}
+.sheet-ac-tool__wrap, .sheet-ac-item__wrap {
+ font-size: 14pt;
+ font-weight: 600;
+}
+
+.sheet-ac-body {
+ display: none;
+}
+
+.sheet-ac-equipment {
+ display: none;
+}
+
+input[name=attr_nav][value="Character Sheet"] ~ .sheet-ac-body {
+ display: block;
+}
+
+input[name=attr_nav][value=Equipment] ~ .sheet-ac-equipment {
+ display: grid;
+}
+
+.sheet-rolltemplate-alteredcarbon {
+ background: white;
+ padding: 0.5em;
+}
+.sheet-rolltemplate-alteredcarbon h1 {
+ margin-bottom: 0.25em;
+ color: #00a99d;
+ font-size: 14pt;
+ letter-spacing: 2px;
+ line-height: 14pt;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-rolltemplate-alteredcarbon h2 {
+ margin-bottom: 0.25em;
+ color: #d2232a;
+ font-size: 10pt;
+ font-weight: 600;
+ line-height: 10pt;
+ text-align: center;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-container {
+ padding: 0.5em;
+ border: 2px solid #38e0d5;
+ color: black;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-target {
+ margin: 0.5em 0;
+ padding: 0.5em;
+ text-align: center;
+ background: #042938;
+ color: white;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-target .sheet-ac-roll-target-label {
+ font-size: 12pt;
+ font-weight: 600;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-target .sheet-ac-roll-target-label:after {
+ display: inline;
+ content: ":";
+ margin-right: 0.75em;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-target .sheet-ac-roll-target-value {
+ color: #38e0d5;
+ font-size: 12pt;
+ font-weight: 800;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result {
+ display: flex;
+ justify-content: space-around;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-roll *, .sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-luck *, .sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-bonus * {
+ text-align: center;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-roll strong, .sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-luck strong, .sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-bonus strong {
+ display: block;
+ font-size: 9pt;
+ font-weight: 400;
+ text-transform: uppercase;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-roll div, .sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-luck div, .sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result-bonus div {
+ width: 1em;
+ height: 1em;
+ margin: auto;
+ padding: 0.25em;
+ border: 1px solid #aaa;
+ font-size: 16pt;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result .importantroll,
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result .fullcrit,
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result .fullfail,
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result .inlinerollresult {
+ border: none;
+ background: transparent;
+ font-family: inherit;
+ line-height: 1em;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result .fullcrit {
+ color: #00a99d;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-result .fullfail {
+ color: #d2232a;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-tag {
+ margin-top: 0.5em;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-tag .sheet-ac-roll-ace {
+ padding: 5px;
+ border: 1px solid #00a99d;
+ color: #00a99d;
+ font-size: 12pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-tag .sheet-ac-roll-stroke {
+ padding: 5px;
+ background: #38e0d5;
+ color: white;
+ font-size: 12pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-rolltemplate-alteredcarbon .sheet-ac-roll-tag .sheet-ac-roll-catastrophe {
+ padding: 5px;
+ background: #d2232a;
+ color: white;
+ font-size: 12pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+}
diff --git a/Altered Carbon Official/altered-carbon.html b/Altered Carbon Official/altered-carbon.html
new file mode 100644
index 0000000000..f3bcde6353
--- /dev/null
+++ b/Altered Carbon Official/altered-carbon.html
@@ -0,0 +1,1025 @@
+
+
+
DHF Protectorate Citizenship Record
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Damage Threshold
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{#name}}
+
{{name}}
{{/name}}
+
{{#character_name}}
+
{{character_name}}
{{/character_name}}
+ {{#target_number}}
+
{{target_number}}
{{/target_number}}
+
{{#roll}}
+
{{/roll}}
+ {{#rollGreater() luck 0}}
+
{{/rollGreater() luck 0}}
+ {{#rollGreater() bonus 0}}
+
{{/rollGreater() bonus 0}}
+
+
+ {{#rollWasCrit() roll}}
+ {{#^rollWasCrit() luck}}
+
{{/^rollWasCrit() luck}}
+ {{/rollWasCrit() roll}}
+ {{#^rollWasCrit() roll}}
+ {{#rollWasCrit() bonus}}
+
{{/rollWasCrit() bonus}}
+ {{/^rollWasCrit() roll}}
+ {{#rollWasCrit() roll}}
+ {{#rollWasCrit() luck}}
+
{{/rollWasCrit() luck}}
+ {{/rollWasCrit() roll}}
+ {{#rollWasFumble() roll}}
+ {{#rollWasFumble() luck}}
+
{{/rollWasFumble() luck}}
+ {{/rollWasFumble() roll}}
+
+
+
+
+
\ No newline at end of file
diff --git a/Altered Carbon Official/altered-carbon.png b/Altered Carbon Official/altered-carbon.png
new file mode 100644
index 0000000000..263e4b625c
Binary files /dev/null and b/Altered Carbon Official/altered-carbon.png differ
diff --git a/Altered Carbon Official/sheet.json b/Altered Carbon Official/sheet.json
new file mode 100644
index 0000000000..ea84844111
--- /dev/null
+++ b/Altered Carbon Official/sheet.json
@@ -0,0 +1,8 @@
+{
+ "html": "altered-carbon.html",
+ "css": "altered-carbon.css",
+ "authors": "Nic B.",
+ "roll20userid": "45398",
+ "preview": "altered-carbon.png",
+ "instructions": "Official Altered Carbon by Hunters Entertainment"
+}
\ No newline at end of file
diff --git a/Altered Carbon Official/src/js/sheetworker.js b/Altered Carbon Official/src/js/sheetworker.js
new file mode 100644
index 0000000000..0e4cfc47bc
--- /dev/null
+++ b/Altered Carbon Official/src/js/sheetworker.js
@@ -0,0 +1,26 @@
+
+const updateBonuses = () => {
+ const array = ["strength","empathy","acuity","perception","willpower","intelligence"];
+
+ getAttrs(array, values => {
+
+ array.forEach(item => updateBonus(item, values[item]));
+
+ });
+}
+
+const updateBonus = (stat, new_value) => {
+ const bonus = Math.floor(new_value/10);
+
+ const updateAttrs = {};
+
+ updateAttrs[`${stat}_bonus`] = bonus;
+
+ setAttrs(updateAttrs);
+
+ console.log(updateAttrs);
+}
+
+["strength","empathy","acuity","perception","willpower","intelligence"].forEach(item => on(`change:${item}`, eventInfo => updateBonus(item, eventInfo.newValue)));
+
+on(`sheet:opened`, eventInfo => updateBonuses())
\ No newline at end of file
diff --git a/Altered Carbon Official/src/pug/altered-carbon.pug b/Altered Carbon Official/src/pug/altered-carbon.pug
new file mode 100644
index 0000000000..2dfe5f64b4
--- /dev/null
+++ b/Altered Carbon Official/src/pug/altered-carbon.pug
@@ -0,0 +1,221 @@
+include mixins.pug
+
+.ac-wrapper
+ h1(data-i18n="DHF Protectorate Citizenship Record") DHF Protectorate Citizenship Record
+ .ac-header
+ .ac-header__grid
+ each entry in ["Character Name", "Planet of Origin", "Age", "Sleeve Type", "Archetype", "Campaign"]
+ -
+ const attr = entry.toLowerCase().replace(/ /g,"_");
+ .ac-header__item
+ .ac-header__label(data-i18n=entry)=entry
+ input.ac-header__input(name=`attr_${attr}`, type="text")
+ each entry in ["Stackpoints", "Influence Points", "Ego Points", "Wealth Level"]
+ - const attr = entry.toLowerCase().replace(/ /g,"_");
+ .ac-header__item--subitem
+ .ac-header__label(data-i18n=entry)=entry
+ input.ac-header__input(name=`attr_${attr}`, type="text")
+ .ac-nav
+ each link in ["Character Sheet", "Equipment"]
+ label.ac-nav__item
+ input.ac-nav__hide(type="radio", name="attr_nav", value=link)
+ .ac-nav__label(data-i18n=link)=link
+
+ input.ac-nav__hide(type="hidden", name="attr_nav")
+ .ac-body
+ .ac-body__stats
+ each entry in [{"Strength":["Athletics", "Brawl", "Endurance", "Melee Combat", "Toughness"]},{"Perception":["Detection", "D. Energy Wpns", "Firearms", "Search", "Stealth", "Throw"]},{"Empathy":["Diplomacy", "Expression", "Read Person"]}, {"Willpower":["Composure", "Discipline", "Intimidation"]}, {"Acuity":["Data Analysis", "Data Engineering", "Digi. Networking", "Investigation", "Mechanics", "Navigation", "Pilot", "Survival"]}, {"Intelligence":["Bureaucracy", "Cultures", "Engineering", "Geography", "History", "Science", "Medicine"]}]
+ -
+ const block_title = Object.keys(entry)[0];
+ const skill_array = Object.values(entry)[0];
+ const attr = block_title.toLowerCase().replace(/ /g,"_");
+ .ac-stat
+ .ac-stat__header
+ .ac-stat__title(data-i18n=block_title)=block_title
+ .ac-stat__value
+ input(name=`attr_${attr}`, type="number", value=20)
+ span.ac-stat__bonus(name=`attr_${attr}_bonus`) -
+ .ac-stat__body
+ each skill in skill_array
+ -
+ const attr = skill.toLowerCase().replace(/ /g,"_");
+ const roll = [
+ `&{template:alteredcarbon}`,
+ `{{name=${skill}}}`,
+ `{{character_name=@{character_name}}}`,
+ `{{target_number=?{Target Number|5}}}`,
+ `{{roll=[[@{${attr}}]]}}`,
+ `{{bonus=[[?{Number of Bonus Dice|0}?{Bonus|none,0|d20,d20cs1cf20kl1|d12,d12cs1cf12kl1|d10,d10cs1cf10kl1|d8,d8cs1cf8kl1|d6,d6cs1cf6kl1|d4,d4cs1cf4kl1}]]}}`,
+ `{{luck=[[?{Luck|none,0|d20,d20cs1cf20|d12,d12cs1cf12|d10,d10cs1cf10|d8,d8cs1cf8|d6,d6cs1cf6|d4,d4cs1cf4}]]}}`
+ ].join(" ");
+ .ac-skill
+ button.ac-skill__name(data-i18n=skill, type="roll", value=roll)=skill
+ .ac-skill__value
+ select(name=`attr_${attr}`)
+ +dice-select()
+ .ac-body__traits
+ each repeating in ["Traits", "Abilities", "Specializations"]
+ - const attr = repeating.toLowerCase().replace(/ /g,"_");
+ .ac-traits
+ .ac-traits__header(data-i18n=repeating)=repeating
+ fieldset(class=`repeating_${attr}`)
+ .ac-trait
+ .ac-trait__title
+ input.ac-trait__input(data-i18n-placeholder="Name", name=`attr_${attr}_name`, type="text")
+ .ac-trait__description
+ textarea(data-i18n-placeholder="Description", name=`attr_${attr}_description`)
+ .ac-body__misc
+ .ac-body__col
+ .ac-networks
+ .ac-networks__header(data-i18n="Networks/Contacts") Networks/Contacts
+ fieldset(class=`repeating_networks`)
+ .ac-networks__item
+ input.ac-networks__input(name="attr_network", type="text")
+ .ac-baggage
+ .ac-baggage__header(data-i18n="Baggage/Scandals") Baggage/Scandals
+ fieldset(class=`repeating_baggage`)
+ .ac-baggage__item
+ textarea.ac-baggage__input(name="attr_baggage", type="text")
+ .ac-body__col
+ .ac-biometrics
+ .ac-biometrics__header(data-i18n="Sleeve Biometrics") Sleeve Biometrics
+ .ac-biometrics__container
+ .ac-biometrics__row
+ .ac-biometrics__label(data-i18n="Tech Points") Tech Points
+ .ac-biometrics__input--minmax
+ input.ac-minmax(name="attr_techpoints", type="number")
+ | /
+ input.ac-minmax(name="attr_techpoints_max", type="number")
+ .ac-biometrics__row
+ .ac-biometrics__label(data-i18n="Damage Threshold") Damage Threshold
+ .ac-biometrics__input
+ input.ac-minmax(name="attr_damagethreshold", type="text")
+ .ac-biometrics__row--textarea
+ .ac-biometrics__label(data-i18n="Special") Special
+ .ac-biometrics__input
+ textarea(name="attr_special")
+ .ac-health
+ .ac-health__row
+ .ac-health__label(data-i18n="Health Points") Health Points
+ .ac-health__input--minmax
+ input.ac-minmax(name="attr_hitpoints", type="number")
+ | /
+ input.ac-minmax(name="attr_hitpoints_max", type="number")
+ .ac-health__injuries
+ .ac-health__label(data-i18n="Injuries") Injuries
+ fieldset(class=`repeating_injuries`)
+ .ac-networks__item
+ input.ac-networks__input(name="attr_injuries", type="text")
+ .ac-equipment
+ .ac-equipment__credits
+ .ac-credits
+ .ac-credits__title(data-i18n="Credits")
+ each level in [1, 2, 3, 4, 5]
+ .ac-credits__item
+ .ac-credits__label(data-i18n=`Lv.${level}`) Lv.#{level}
+ input.ac-credits__input(name=`attr_credits_${level}`, type="text")
+
+ .ac-equipment__equipment
+ .ac-equipment__header(data-i18n="Equipment") Equipment
+ fieldset(class=`repeating_equipment`)
+ .ac-item
+ .ac-item__row--name
+ .ac-item__label--name(data-i18n="Name") Name
+ input(name="attr_equipment_name", type="text")
+ .ac-item__price
+ .ac-item__label(data-i18n="Price Level") Price Level
+ input(name="attr_equipment_price", type="text")
+ .ac-item__row--skillchecks
+ .ac-item__label(data-i18n="Skill Check(s)") Skill Check(s)
+ span.ac-item__wrap {
+ input.ac-item__input--wrap(name="attr_equipment_checks", type="text")
+ span.ac-item__wrap }
+ .ac-item__bonus
+ .ac-item__label--small +
+ input(name="attr_equipment_bonusdice", type="text")
+ .ac-item__label--small ×
+ .ac-item__label--small(data-i18n="Bonus Dice") Bonus Dice
+ .ac-item__row--checks
+ .ac-item__label(data-i18n="Tech Point Chassis") Tech Point Chassis
+ .ac-item__checkmarks
+ each index in [1,2,3,4,5,6,7,8,9,10]
+ label.ac-checkmark
+ input(name="attr_equipment_tp_chassis", type="radio", value=index)
+ span
+ .ac-item__row--checks
+ .ac-item__label(data-i18n="Tech Points Used") Tech Points Used
+ .ac-item__checkmarks
+ each index in [1,2,3,4,5,6,7,8,9,10]
+ label.ac-checkmark--red
+ input(name="attr_equipment_tp_used", type="radio", value=index)
+ span
+ .ac-item__row--special
+ .ac-item__special
+ .ac-item__label(data-i18n="Special") Special
+ textarea.ac-item__textarea(name="attr_equipment_special")
+ .ac-item__row
+ .ac-item__triggered
+ .ac-item__label(data-i18n="Triggered Effects") Triggered Effects
+ each index in [1,2,3,4,5]
+ .ac-item__checkmarks
+ each ch_index in [1,2,3,4,5]
+ label.ac-checkmark--cyan
+ input(name=`attr_equipment_triggered_${index}`, type="radio", value=ch_index)
+ span
+ .ac-item__input
+ input(name=`attr_equipment_triggered_${index}_desc`, type="text")
+
+ .ac-equipment__tools
+ .ac-equipment__header(data-i18n="Tools") Tools
+ fieldset(class=`repeating_tools`)
+ .ac-tool
+ .ac-tool__row--name
+ .ac-tool__label--name(data-i18n="Name") Name
+ input(name="attr_equipment_name", type="text")
+ .ac-tool__price
+ .ac-tool__label(data-i18n="Price Level") Price Level
+ input(name="attr_equipment_price", type="text")
+ .ac-tool__row--skillchecks
+ .ac-tool__label(data-i18n="Skill Check(s)") Skill Check(s)
+ span.ac-tool__wrap {
+ input.ac-tool__input--wrap(name="attr_equipment_checks", type="text")
+ span.ac-tool__wrap }
+ .ac-tool__bonus
+ .ac-tool__label--small +
+ input(name="attr_equipment_bonusdice", type="text")
+ .ac-tool__label--small ×
+ .ac-tool__label--small(data-i18n="Bonus Dice") Bonus Dice
+ .ac-tool__row--skillchecks
+ .ac-tool__label(data-i18n="Skill Check(s)") Skill Check(s)
+ span.ac-tool__wrap {
+ input.ac-tool__input--wrap(name="attr_equipment_checks", type="text")
+ span.ac-tool__wrap }
+ .ac-tool__bonus
+ .ac-tool__label--small +
+ input(name="attr_equipment_bonusdice", type="text")
+ .ac-tool__label--small ×
+ .ac-tool__label--small(data-i18n="Bonus Dice") Bonus Dice
+ .ac-tool__row--checks
+ .ac-tool__label(data-i18n="Tech Point Chassis") Tech Point Chassis
+ .ac-tool__checkmarks
+ each index in [1,2,3,4,5]
+ label.ac-checkmark
+ input(name="attr_equipment_tp_chassis", type="radio", value=index)
+ span
+ .ac-tool__row--checks
+ .ac-tool__label(data-i18n="Tech Points Used") Tech Points Used
+ .ac-tool__checkmarks
+ each index in [1,2,3,4,5]
+ label.ac-checkmark--red
+ input(name="attr_equipment_tp_used", type="radio", value=index)
+ span
+ .ac-tool__row--special
+ .ac-tool__special
+ .ac-tool__label(data-i18n="Special") Special
+ textarea.ac-tool__textarea(name="attr_tool_special")
+
+include rolltemplates.pug
+
+script(type="text/worker")
+
+ include ../js/sheetworker.js
\ No newline at end of file
diff --git a/Altered Carbon Official/src/pug/mixins.pug b/Altered Carbon Official/src/pug/mixins.pug
new file mode 100644
index 0000000000..266e43613c
--- /dev/null
+++ b/Altered Carbon Official/src/pug/mixins.pug
@@ -0,0 +1,4 @@
+mixin dice-select(selected)
+ - const dice = ["20", "12", "10", "8", "6", "4"];
+ each die in dice
+ option(value=`d${die}cs1cf${die}` selected=(die == selected)) d#{die}
\ No newline at end of file
diff --git a/Altered Carbon Official/src/pug/rolltemplates.pug b/Altered Carbon Official/src/pug/rolltemplates.pug
new file mode 100644
index 0000000000..ae654f604e
--- /dev/null
+++ b/Altered Carbon Official/src/pug/rolltemplates.pug
@@ -0,0 +1,56 @@
+
+rolltemplate.sheet-rolltemplate-alteredcarbon
+ .ac-roll-container
+ | {{#name}}
+ h1 {{name}}
+ | {{/name}}
+ .ac-roll-body
+ | {{#character_name}}
+ h2 {{character_name}}
+ | {{/character_name}}
+ | {{#target_number}}
+ .ac-roll-target
+ span.ac-roll-target-label(data-i18n="Target")
+ span.ac-roll-target-value {{target_number}}
+ | {{/target_number}}
+ .ac-roll-result
+ | {{#roll}}
+ .ac-roll-result-roll
+ strong(data-i18n="Roll")
+ div {{roll}}
+ | {{/roll}}
+ | {{#rollGreater() luck 0}}
+ .ac-roll-result-luck
+ strong(data-i18n="Luck")
+ div {{luck}}
+ | {{/rollGreater() luck 0}}
+ | {{#rollGreater() bonus 0}}
+ .ac-roll-result-bonus
+ strong(data-i18n="Bonus")
+ div {{bonus}}
+ | {{/rollGreater() bonus 0}}
+
+ .ac-roll-tag
+ | {{#rollWasCrit() roll}}
+ | {{#^rollWasCrit() luck}}
+ .ac-roll-ace(data-i18n="Ace")
+ | {{/^rollWasCrit() luck}}
+ | {{/rollWasCrit() roll}}
+
+ | {{#^rollWasCrit() roll}}
+ | {{#rollWasCrit() bonus}}
+ .ac-roll-ace(data-i18n="Ace")
+ | {{/rollWasCrit() bonus}}
+ | {{/^rollWasCrit() roll}}
+
+ | {{#rollWasCrit() roll}}
+ | {{#rollWasCrit() luck}}
+ .ac-roll-stroke(data-i18n="Stroke of Luck")
+ | {{/rollWasCrit() luck}}
+ | {{/rollWasCrit() roll}}
+
+ | {{#rollWasFumble() roll}}
+ | {{#rollWasFumble() luck}}
+ .ac-roll-catastrophe(data-i18n="Catastrophe")
+ | {{/rollWasFumble() luck}}
+ | {{/rollWasFumble() roll}}
\ No newline at end of file
diff --git a/Altered Carbon Official/src/scss/altered-carbon.scss b/Altered Carbon Official/src/scss/altered-carbon.scss
new file mode 100644
index 0000000000..7a65d1affa
--- /dev/null
+++ b/Altered Carbon Official/src/scss/altered-carbon.scss
@@ -0,0 +1,1211 @@
+@import url("https://fonts.googleapis.com/css?family=Montserrat:200|Montserrat:400|Montserrat:600|Montserrat:700|Montserrat:800|Montserrat:900&display=swap");
+
+$foreground: black;
+$background: white;
+
+$invert-foreground: white;
+$invert-input-background: rgba(0, 0, 40, .25);
+$invert-background: rgb(4, 41, 56);
+
+$invert-background-gradient: linear-gradient(164deg, rgb(4, 41, 56) 0%, rgb(3, 31, 39) 100%);
+
+$cyan-sheet: #00a99d;
+$cyan: #38e0d5;
+$red: #d2232a;
+$yellow: #bd9c55;
+$grey: #aaa;
+$light-grey: #eee;
+
+.sheet-ac-wrapper {
+ background: $background;
+ color: $foreground;
+
+ font-family: Montserrat, sans-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 {
+ min-width: 0;
+ width: 100%;
+
+ border-radius: 0;
+
+ background-color: transparent;
+ color: $foreground;
+
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 10pt;
+ font-variant: normal;
+
+ &:hover {
+ border: 1px solid $cyan;
+ box-shadow: 0 0 5px $cyan;
+ }
+ }
+
+ button {
+ &:hover {
+ border: 1px solid $cyan;
+ box-shadow: 0 0 5px $cyan;
+ }
+ }
+
+ 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%;
+ margin: 0;
+ padding: 0;
+
+ border: 0;
+ 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 $foreground;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+ box-shadow: none;
+
+ line-height: 2em;
+ text-shadow: none;
+
+ font-weight: bold;
+
+ &:hover {
+ border: 1px solid $cyan;
+ box-shadow: 0 0 5px $cyan;
+ }
+ }
+
+ button.repcontrol_del {
+ margin-right: .25rem;
+
+ background: transparent;
+ border: 1px solid $red;
+ color: $red;
+
+ &:hover {
+ border: 1px solid $red;
+ box-shadow: 0 0 5px $red;
+ }
+ }
+
+ a.repcontrol_move {
+ margin-left: .25rem;
+
+ background: transparent;
+ color: $foreground;
+
+ &:hover {
+ border: 1px solid $cyan;
+ box-shadow: 0 0 5px $cyan;
+ }
+ }
+
+ }
+
+ .repcontrol {
+ padding: .25em;
+
+ background-color: transparent;
+
+ button.repcontrol_add,
+ button.repcontrol_del,
+ button.repcontrol_move,
+ button.repcontrol_edit {
+ display: block;
+ border: 1px solid $foreground;
+ 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;
+
+ &:hover {
+ border: 1px solid $cyan;
+ box-shadow: 0 0 5px $cyan;
+ }
+ }
+
+ 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;
+ }
+ }
+ }
+
+ h1 {
+ font-size: 16pt;
+ font-weight: 700;
+ letter-spacing: 2px;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+}
+
+%label {
+ font-weight: 400;
+ text-transform: uppercase;
+}
+
+%input {
+ &[type="number"],
+ &[type="text"] {
+ margin: 0;
+ padding: 0;
+
+ border: 0;
+ }
+}
+
+.sheet-ac {
+
+ &-header {
+ padding: 1em;
+
+ background: $invert-background-gradient;
+ background-color: $invert-background;
+ color: $invert-foreground;
+
+ &__grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 0 1em;
+ }
+
+ &__item {
+ grid-column: span 2;
+
+ &--subitem {
+ @extend .sheet-ac-header__item;
+ grid-column: span 1;
+ }
+
+ }
+
+ &__label {
+ @extend %label;
+ font-family: 12pt;
+ }
+
+ &__input {
+ @extend %input;
+
+ &[type="number"],
+ &[type="text"] {
+ border: 1px solid transparent;
+ border-bottom: 1px solid $invert-foreground;
+ color: $invert-foreground !important;
+
+ font-size: 12pt !important;
+ font-weight: 800 !important;
+ text-transform: uppercase;
+ }
+ }
+
+
+ }
+
+ &-nav {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+
+ > label {
+ margin: 5px;
+ }
+
+ &__item {
+ width: auto;
+ padding: 5px;
+
+ cursor: pointer;
+
+ font-size: 11pt;
+ font-weight: 600;
+ text-transform: uppercase;
+ }
+
+ &__label {
+ padding: 0 5px;
+
+ border-radius: 3px;
+ border: 1px solid $foreground;
+
+ &:hover {
+ border: 1px solid $cyan;
+ box-shadow: 0 0 5px $cyan;
+ }
+ }
+
+ &__hide {
+ display: none;
+ }
+
+ input[type=radio]:checked + .sheet-ac-nav__label {
+ border: 1px solid $cyan-sheet;
+ background: rgba($cyan-sheet, 15%);
+ color: $cyan-sheet;
+ }
+ }
+
+ &-body {
+
+ &__stats {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 1em;
+ }
+
+ &__traits {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ margin: 1em 0;
+ padding: 1em 1em;
+
+ background-color: $invert-background;
+ background: $invert-background-gradient;
+ color: $invert-foreground;
+
+ .itemcontrol {
+
+ button.repcontrol_del,
+ a.repcontrol_move {
+ border: 1px solid $invert-foreground;
+
+ color: $invert-foreground
+ }
+
+ a.repcontrol_move {
+ color: $invert-foreground;
+ }
+
+ }
+
+ .repcontrol {
+ margin-bottom: 1em;
+
+ button.repcontrol_add,
+ button.repcontrol_del,
+ button.repcontrol_move,
+ button.repcontrol_edit {
+ border: 1px solid $invert-foreground;
+ color: $invert-foreground;
+ }
+ }
+ }
+
+ &__misc {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 1em;
+ }
+
+ }
+
+ &-stat {
+
+ &__header {
+ display: grid;
+ grid-template-columns: 1fr 5em;
+ align-items: center;
+ padding: .125em .5em;
+
+ background: $yellow;
+ color: $background;
+
+ font-size: 12pt;
+ font-weight: 800;
+ text-transform: uppercase;
+
+ input {
+ @extend %input;
+ }
+ }
+
+ &__title {
+ letter-spacing: 2px;
+ }
+
+ &__value {
+ display: grid;
+ grid-template-columns: 1fr .75fr;
+ align-items: center;
+
+ color: $background;
+
+ input {
+ @extend %input;
+
+ &[type="text"],
+ &[type="number"] {
+ background: rgba($foreground, .125);
+ color: $background;
+
+ font-size: 14pt;
+ font-weight: 800;
+ }
+ }
+
+ span {
+ text-align: center;
+ font-weight: 600;
+ }
+ }
+
+ &__bonus {
+ font-size: 12pt;
+
+ &:before,
+ &:after {
+ display: inline;
+ }
+
+ &:before {
+ content: "(";
+ }
+
+ &:after {
+ content: ")";
+ }
+ }
+
+ &__body {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: .25em 0;
+ }
+
+ }
+
+ &-skill {
+
+ display: grid;
+ grid-template-columns: 1fr 3.5em;
+ gap: 0;
+ align-items: center;
+
+ &__name[type="roll"] {
+ display: flex;
+ flex-grow: 0;
+ align-items: center;
+ border: 0;
+ background: none;
+
+ font-size: 9pt !important;
+ font-weight: 600;
+ text-align: left;
+ text-transform: uppercase;
+
+ &:before {
+ display: none;
+ }
+
+ &:after {
+ display: block;
+ flex-grow: 1;
+ content: "";
+ height: 0;
+ margin: 0;
+ margin-left: 4px;
+
+ border-bottom: 3px solid $yellow;
+ }
+
+ &:hover {
+ color: $cyan;
+ box-shadow: none !important;
+ border: 0 !important;
+
+ &:after {
+ border-color: $cyan;
+ }
+ }
+ }
+
+ &__value {
+ margin: 0;
+ padding: 0;
+
+ select {
+ margin: 0 !important;
+ padding: 0;
+
+ border: 0;
+
+ font-size: 10pt;
+ line-height: 10pt;
+ }
+ }
+
+ }
+
+ &-traits {
+ border-right: 1px solid rgba($invert-foreground, .25);
+ padding: 1em;
+
+ &:last-child {
+ border-right: 0;
+ }
+
+ &__header {
+ padding: .5em;
+ margin-bottom: .5em;
+
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ }
+
+ &-trait {
+ margin-bottom: 1em;
+
+ border: 1px solid rgba($cyan-sheet, .5);
+
+ &__title {
+ display: flex;
+ align-items: center;
+ flex-flow: row nowrap;
+ margin-bottom: 0;
+ padding: 0;
+
+ border: 1px solid transparent;
+
+ > div {
+ flex-shrink: 0;
+ margin-right: 5px;
+ }
+
+ > input {
+ flex-grow: 1;
+ height: 2.5em;
+
+ background: $invert-input-background !important;
+ border: 1px solid transparent;
+ border-bottom: 1px solid rgba($cyan-sheet, .5);
+ border-radius: 0;
+ color: $cyan !important;
+
+ font-size: 9pt !important;
+ font-weight: 600 !important;
+ }
+ }
+
+ &__label {
+ @extend %label;
+ }
+
+ &__description {
+ padding: 0;
+
+ textarea {
+ width: 100%;
+ height: 7.5em;
+ padding: .25em;
+ margin: 0;
+
+ border: 1px solid transparent;
+ border-radius: none;
+ background: $invert-input-background;
+ color: $invert-foreground;
+
+ font-size: 9pt;
+ }
+ }
+
+ }
+
+ &-networks,
+ &-baggage {
+
+ &__header {
+ color: $red;
+
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+ }
+
+ &__item {
+ display: flex;
+ align-items: center;
+ flex-flow: row nowrap;
+ margin-bottom: .5em;
+
+ border: 0;
+ border-bottom: 1px solid $grey;
+
+ &:before {
+ display: inline-block;
+ flex-shrink: 0;
+ content: "4";
+ margin-right: .25em;
+
+ color: $cyan-sheet;
+
+ font-family: "Pictos";
+ }
+
+ > input {
+ flex-grow: 1;
+ border: 0;
+
+ font-size: 10pt !important;
+ }
+ }
+
+ }
+
+ &-baggage {
+ textarea {
+ height: 4.5em;
+ }
+
+ &__item {
+ align-items: flex-start !important;
+
+ &:before {
+ margin-top: .1em;
+ }
+ }
+
+ }
+
+ &-biometrics {
+
+ &__header {
+ color: $red;
+
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+ }
+
+ &__container {
+ border: 1px solid $yellow;
+ padding: .5em;
+ }
+
+ &__row {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+
+ &--textarea {
+ margin-top: .5em;
+
+ textarea {
+ background: $light-grey;
+ }
+ }
+ }
+
+ &__label {
+ flex-shrink: 0;
+
+ font-size: 10pt;
+ font-weight: 600;
+ text-transform: uppercase;
+
+ &:after {
+ display: inline;
+ content: ":";
+ margin-right: .5em;
+ }
+ }
+
+ &__input {
+ flex-grow: 1;
+
+ font-size: 10pt;
+ font-weight: 600;
+
+ input[type="number"],
+ input[type="text"] {
+ border: 0;
+ border-bottom: 1px solid $grey;
+ }
+
+ &--minmax {
+ @extend .sheet-ac-biometrics__input;
+ flex-grow: 0;
+
+ display: grid;
+ grid-template-columns: 1fr .5em 1fr;
+ align-items: center;
+ width: 50%;
+
+ }
+ }
+
+ textarea {
+ height: 7.5em;
+ }
+
+ }
+
+ &-health {
+ margin-top: 2em;
+
+ &__label {
+ flex-shrink: 0;
+
+ font-size: 10pt;
+ font-weight: 600;
+ text-transform: uppercase;
+
+ &:after {
+ display: inline;
+ content: ":";
+ margin-right: .5em;
+ }
+ }
+
+ &__input {
+ flex-grow: 1;
+
+ font-size: 10pt;
+ font-weight: 600;
+
+ input[type="number"],
+ input[type="text"] {
+ border: 0;
+ border-bottom: 1px solid $grey;
+ }
+
+ &--minmax {
+ @extend .sheet-ac-biometrics__input;
+ flex-grow: 0;
+ display: grid;
+ grid-template-columns: 1fr .5em 1fr;
+ align-items: center;
+ width: 30%;
+ }
+ }
+
+ &__row {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+
+ margin-bottom: .5em;
+
+ &--textarea {
+
+ textarea {
+ background: $light-grey;
+ }
+ }
+ }
+
+ }
+
+ &-equipment {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ align-items: stretch;
+ gap: 1em 0;
+
+ > * {
+ padding: 0.75em;
+ }
+
+ &__credits {
+ grid-column: 1 / -1;
+ }
+
+ &__header {
+ color: $red;
+
+ font-size: 14pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ &__tools {
+ border-left: 1px dashed $grey;
+ }
+ }
+
+ &-credits {
+
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ gap: 1.5em;
+ align-items: center;
+
+ &__title {
+ color: $red;
+
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+ }
+
+ &__item {
+ display: flex;
+ border: 1px solid $cyan-sheet;
+ border-left: 3px solid $cyan-sheet;
+ border-right: 3px solid $cyan-sheet;
+
+ font-size: 10pt;
+ font-weight: 600;
+
+ input {
+ border: 0;
+
+ text-align: center;
+ }
+ }
+
+ &__label {
+ padding: .125em;
+ }
+
+ &__input {
+ margin-left: .5em;
+ }
+
+ }
+
+ &-tool,
+ &-item {
+ margin-bottom: 1.5em;
+ padding: .75em;
+
+ border: 2px solid $cyan-sheet;
+
+ input {
+ flex-shrink: 1;
+
+ border: 0;
+ width: 100%;
+ }
+
+ &__row {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin-bottom: 1em;
+
+ input {
+ flex-grow: 1;
+ border-bottom: 1px solid $grey;
+ }
+
+ &--name,
+ &--skillchecks {
+ @extend .sheet-ac-item__row;
+ }
+
+ &--bonus {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ margin-bottom: 1em;
+ }
+
+ &--checks {
+ display: grid;
+ grid-template-columns: 1fr 1.5fr;
+ margin-bottom: 1em;
+ }
+
+ &--special {
+ display: grid;
+ }
+ }
+
+ &__label {
+ flex-shrink: 0;
+
+ font-size: 9pt;
+ font-weight: 800;
+
+ &:after {
+ display: inline;
+ content: ":";
+
+ margin-right: .5em;
+ }
+
+ &--name {
+ @extend .sheet-ac-item__label;
+ color: $red;
+
+ font-size: 14pt;
+ font-weight: 800;
+ text-transform: uppercase;
+ }
+
+ &--small {
+ flex-basis: 1.5em;
+
+ font-weight: 400;
+ }
+ }
+
+ &__bonus {
+ grid-column: span 2;
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+
+ }
+
+ &__checkmarks {
+ display: grid;
+ grid-template-columns: repeat(10, 1fr);
+
+ label {
+ cursor: pointer;
+
+ span {
+ display: block;
+ height: 1em;
+ width: 1em;
+ border-radius: 50%;
+
+ background-color: rgba($cyan-sheet, .125);
+ border: 1px solid $cyan;
+ }
+
+ input[type="radio"] {
+ display: none;
+
+ &:checked {
+
+ & + span {
+ background-color: $cyan-sheet;
+ }
+ }
+ }
+
+ &.sheet-ac-checkmark--red {
+ span {
+ background-color: rgba($red, .125);
+ border: 1px solid $red;
+ }
+
+ input[type="radio"] {
+ display: none;
+
+ &:checked {
+ & + span {
+ background-color: $red;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ &__price {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ margin: .25em;
+ padding: .25em;
+
+ border: 1px solid $yellow;
+
+ .sheet-ac-tool__label,
+ .sheet-ac-item__label {
+ font-size: 8pt;
+ font-weight: 400;
+ }
+
+ input[type=text] {
+ width: 4em;
+ }
+ }
+
+ &__special {
+
+ textarea {
+ border: 1px solid $grey;
+
+ height: 5em;
+ }
+
+ }
+
+ &__triggered {
+ display: grid;
+ grid-template-columns: 1fr 2fr;
+ align-items: center;
+ gap: .5em;
+ width: 100%;
+
+ .sheet-ac-item__checkmarks {
+ grid-template-columns: repeat(5, 1fr);
+ }
+ }
+
+ &__special,
+ &__triggered {
+
+ .sheet-ac-tool__label,
+ .sheet-ac-item__label {
+ grid-column: 1 / -1;
+
+ color: $cyan-sheet;
+
+ font-size: 10pt;
+ }
+
+ }
+
+ &__wrap {
+ font-size: 14pt;
+ font-weight: 600;
+ }
+ }
+}
+
+.sheet-ac-body {
+ display: none;
+}
+
+.sheet-ac-equipment {
+ display: none;
+}
+
+input[name="attr_nav"][value="Character Sheet"] ~ .sheet-ac-body {
+ display: block;
+}
+
+input[name="attr_nav"][value="Equipment"] ~ .sheet-ac-equipment {
+ display: grid;
+}
+
+.sheet-rolltemplate-alteredcarbon {
+ background: $background;
+ padding: .5em;
+
+ h1 {
+ margin-bottom: .25em;
+
+ color: $cyan-sheet;
+
+ font-size: 14pt;
+ letter-spacing: 2px;
+ line-height: 14pt;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ h2 {
+ margin-bottom: .25em;
+
+ color: $red;
+
+ font-size: 10pt;
+ font-weight: 600;
+ line-height: 10pt;
+ text-align: center;
+ }
+
+ .sheet-ac-roll-container {
+ padding: .5em;
+
+ border: 2px solid $cyan;
+ color: $foreground;
+ }
+
+ .sheet-ac-roll-target {
+ margin: .5em 0;
+ padding: .5em;
+
+ text-align: center;
+
+ background: $invert-background;
+ color: $invert-foreground;
+
+ .sheet-ac-roll-target-label {
+ font-size: 12pt;
+ font-weight: 600;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+
+ &:after {
+ display: inline;
+ content: ":";
+ margin-right: .75em;
+ }
+ }
+
+ .sheet-ac-roll-target-value {
+ color: $cyan;
+
+ font-size: 12pt;
+ font-weight: 800;
+ }
+
+
+ }
+
+ .sheet-ac-roll-result {
+
+ display: flex;
+ justify-content: space-around;
+
+ &-roll,
+ &-luck,
+ &-bonus {
+ * {
+ text-align: center;
+ }
+
+ strong {
+ display: block;
+
+ font-size: 9pt;
+ font-weight: 400;
+ text-transform: uppercase;
+ }
+
+ div {
+ width: 1em;
+ height: 1em;
+ margin: auto;
+ padding: .25em;
+ border: 1px solid $grey;
+ font-size: 16pt;
+ }
+ }
+
+ .importantroll,
+ .fullcrit,
+ .fullfail,
+ .inlinerollresult {
+ border: none;
+ background: transparent;
+
+ font-family: inherit;
+ line-height: 1em;
+ }
+
+ .fullcrit {
+ color: $cyan-sheet;
+ }
+
+ .fullfail {
+ color: $red;
+ }
+ }
+
+ .sheet-ac-roll-tag {
+ margin-top: .5em;
+
+ .sheet-ac-roll-ace {
+ padding: 5px;
+
+ border: 1px solid $cyan-sheet;
+ color: $cyan-sheet;
+
+ font-size: 12pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ .sheet-ac-roll-stroke {
+ padding: 5px;
+
+ background: $cyan;
+ color: $background;
+
+ font-size: 12pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ .sheet-ac-roll-catastrophe {
+ padding: 5px;
+
+ background: $red;
+ color: $background;
+
+ font-size: 12pt;
+ font-weight: 800;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/Altered Carbon Official/translation.json b/Altered Carbon Official/translation.json
new file mode 100644
index 0000000000..7f4bd99a5f
--- /dev/null
+++ b/Altered Carbon Official/translation.json
@@ -0,0 +1,87 @@
+{
+ "DHF Protectorate Citizenship Record":"DHF Protectorate Citizenship Record",
+ "Character Name":"Character Name",
+ "Planet of Origin":"Planet of Origin",
+ "Age":"Age",
+ "Sleeve Type":"Sleeve Type",
+ "Archetype":"Archetype",
+ "Campaign":"Campaign",
+ "Stackpoints":"Stackpoints",
+ "Influence Points":"Influence Points",
+ "Ego Points":"Ego Points",
+ "Wealth Level":"Wealth Level",
+ "Character Sheet":"Character Sheet",
+ "Equipment":"Equipment",
+ "Strength":"Strength",
+ "Athletics":"Athletics",
+ "Brawl":"Brawl",
+ "Endurance":"Endurance",
+ "Melee Combat":"Melee Combat",
+ "Toughness":"Toughness",
+ "Perception":"Perception",
+ "Detection":"Detection",
+ "D. Energy Wpns":"D. Energy Wpns",
+ "Firearms":"Firearms",
+ "Search":"Search",
+ "Stealth":"Stealth",
+ "Throw":"Throw",
+ "Empathy":"Empathy",
+ "Diplomacy":"Diplomacy",
+ "Expression":"Expression",
+ "Read Person":"Read Person",
+ "Willpower":"Willpower",
+ "Composure":"Composure",
+ "Discipline":"Discipline",
+ "Intimidation":"Intimidation",
+ "Acuity":"Acuity",
+ "Data Analysis":"Data Analysis",
+ "Data Engineering":"Data Engineering",
+ "Digi. Networking":"Digi. Networking",
+ "Investigation":"Investigation",
+ "Mechanics":"Mechanics",
+ "Navigation":"Navigation",
+ "Pilot":"Pilot",
+ "Survival":"Survival",
+ "Intelligence":"Intelligence",
+ "Bureaucracy":"Bureaucracy",
+ "Cultures":"Cultures",
+ "Engineering":"Engineering",
+ "Geography":"Geography",
+ "History":"History",
+ "Science":"Science",
+ "Medicine":"Medicine",
+ "Traits":"Traits",
+ "Abilities":"Abilities",
+ "Specializations":"Specializations",
+ "Name":"Name",
+ "Description":"Description",
+ "Networks/Contacts":"Networks/Contacts",
+ "Baggage/Scandals":"Baggage/Scandals",
+ "Sleeve Biometrics":"Sleeve Biometrics",
+ "Damage Threshold":"Damage Threshold",
+ "Tech Points":"Tech Points",
+ "Special":"Special",
+ "Health Points":"Health Points",
+ "Credits":"Credits",
+ "Lv.1":"Lv.1",
+ "Lv.2":"Lv.2",
+ "Lv.3":"Lv.3",
+ "Lv.4":"Lv.4",
+ "Lv.5":"Lv.5",
+ "Price Level":"Price Level",
+ "Skill Check(s)":"Skill Check(s)",
+ "Bonus Dice":"Bonus Dice",
+ "Tech Point Chassis":"Tech Point Chassis",
+ "Tech Points Used":"Tech Points Used",
+ "Triggered Effects":"Triggered Effects",
+ "Tool":"Tool",
+ "Tools":"Tools",
+ "Injuries":"Injuries",
+ "Target":"Target",
+ "Ace":"Ace",
+ "Stroke of Luck":"Stroke of Luck",
+ "Catastrophe":"Catastrophe",
+ "Roll":"Roll",
+ "Luck":"Luck",
+ "Bonus":"Bonus"
+}
\ No newline at end of file
diff --git a/Teens in Space Official/sheet.json b/Teens in Space Official/sheet.json
new file mode 100644
index 0000000000..7114bfd7a8
--- /dev/null
+++ b/Teens in Space Official/sheet.json
@@ -0,0 +1,8 @@
+{
+ "html": "tis.html",
+ "css": "tis.css",
+ "authors": "Nic B.",
+ "roll20userid": "45398",
+ "preview": "tis.png",
+ "instructions": "Official Teens in Space by Hunters Entertainment"
+}
\ No newline at end of file
diff --git a/Teens in Space Official/src/pug/mixins.pug b/Teens in Space Official/src/pug/mixins.pug
new file mode 100644
index 0000000000..15d07ff4d4
--- /dev/null
+++ b/Teens in Space Official/src/pug/mixins.pug
@@ -0,0 +1,32 @@
+mixin characteristic-display(name, attr)
+ .tis-characteristic(class=`tis-characteristic--${attr}`)
+ .tis-characteristic__label(data-i18n=name)=name
+ input.tis-characteristic__input(name=`attr_${attr}`, type="text")
+
+mixin select-display(name, attr, options)
+ label.tis-characteristic(class=`tis-characteristic--${attr}`)
+ .tis-characteristic__label(data-i18n=name)=name
+ select.tis-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:tispace}`,
+ `{{name=${name}}}`,
+ `{{character_name=@{character_name}}}`,
+ `{{roll=[[1@{${attr}}!+?{Bonus|Yes,@{${attr}_bonus}|No,0|None,0}+?{Bonuses / Penalties|0}]]}}`,
+ ].join(" ");
+ .tis-stat
+ button.tis-stat__button(data-i18n=name, name=`roll_${attr}`, type="roll", value=roll)=name
+ .tis-stat__bonus
+ input(name=`attr_${attr}_bonus`, type="number", value="0")
+ select.tis-stat__select(name=`attr_${attr}`)
+ +dice-select()
+
+mixin dice-select(selected)
+ - const dice = ["d4", "d6", "d8", "d10", "d12", "d20"];
+ each die in dice
+ option(value=die selected=(die == selected))=die
\ No newline at end of file
diff --git a/Teens in Space Official/src/pug/rolltemplates.pug b/Teens in Space Official/src/pug/rolltemplates.pug
new file mode 100644
index 0000000000..3eb61458a7
--- /dev/null
+++ b/Teens in Space Official/src/pug/rolltemplates.pug
@@ -0,0 +1,13 @@
+rolltemplate.sheet-rolltemplate-tispace
+ .sheet-tispace-container
+ | {{#name}}
+ h1 {{name}}
+ | {{/name}}
+ .sheet-tispace-body
+ | {{#character_name}}
+ h2 {{character_name}}
+ | {{/character_name}}
+ | {{#roll}}
+ .sheet-tispace-roll-result
+ | Result: {{roll}}
+ | {{/roll}}
\ No newline at end of file
diff --git a/Teens in Space Official/src/pug/tis.pug b/Teens in Space Official/src/pug/tis.pug
new file mode 100644
index 0000000000..1030025d7a
--- /dev/null
+++ b/Teens in Space Official/src/pug/tis.pug
@@ -0,0 +1,55 @@
+include mixins.pug
+
+.tis-wrapper
+ .tis-name
+ h1.tis-name__label(data-i18n="Name") Name
+ input.tis-name__input(name=`attr_character_name`, type="text")
+ .tis-body
+ .tis-body__leftcol
+ .tis-body__character
+ .tis-characteristics__general
+ each characteristic in ["Age","Species","Species Drawback","Trope","Fatal Flaw"]
+ - const attr = characteristic.toLowerCase().replace(/ /g, "_");
+ +characteristic-display(characteristic, attr)
+ .tis-characteristic--textarea(class=`tis-characteristic--description`)
+ .tis-characteristic__label--description(data-i18n="Description") Description
+ textarea.tis-characteristic__textarea(name=`attr_description`)
+ .tis-body__improvements
+ h2(data-i18n="Improvements") Improvements
+ .tis-improvementrow--header
+ strong.tis-improvementrow__label(data-i18n="Name") Strength Name
+ strong.tis-improvementrow__label(data-i18n="Description") Description
+ fieldset(class="repeating_improvements")
+ .tis-improvementrow
+ .tis-improvementrow__input
+ input(name="attr_improvement_name", type="text")
+ .tis-improvementrow__divider
+ .tis-improvementrow__input
+ input(name="attr_improvement_description", type="text")
+ .tis-body__records
+ h2(data-i18n="Records") Records
+ .tis-records
+ textarea.tis-records__textarea(name="attr_")
+
+ .tis-body__rightcol
+ .tis-body__stats
+ h2(data-i18n="Stats") Stats
+ each stat in ["Flight", "Fight", "Brawn", "Brains", "Grit", "Charm"]
+ - const attr = stat.toLowerCase().replace(/ /g, "_");
+ +stat-display(stat, attr)
+ .tis-body__hex--first
+ h2(data-i18n="Adversity Tokens") Adversity Tokens
+ label.tis-adversity
+ input.tis-adversity__input(name=`attr_adversity`, type="number", value="3")
+ .tis-body__hex
+ h2(data-i18n="Improvement Points") Improvement Points
+ label.tis-improvement
+ input.tis-improvement__input(name=`attr_improvement`, type="number", value="3")
+ .tis-body__shiproles
+ h2.tis-textblock__label(data-i18n="Ship Roles") Ship Roles
+ textarea.tis-textblock__textarea(name=`attr_ship_roles`)
+ .tis-body__backpack
+ h2.tis-textblock__label(data-i18n="Space Backpack") Space Backpack
+ textarea.tis-textblock__textarea(name=`attr_space_backpack`)
+
+include rolltemplates.pug
\ No newline at end of file
diff --git a/Teens in Space Official/src/scss/_rolltemplate.scss b/Teens in Space Official/src/scss/_rolltemplate.scss
new file mode 100644
index 0000000000..45afdc7436
--- /dev/null
+++ b/Teens in Space Official/src/scss/_rolltemplate.scss
@@ -0,0 +1,64 @@
+.sheet-rolltemplate-tispace {
+
+ .sheet-tispace-container {
+ display: block;
+ padding: 1em;
+
+ border: 1px solid #023;
+ background: #fff;
+
+ h1 {
+ width: 80%;
+ margin: auto;
+
+ color: #fff;
+ background: #023;
+
+ @include hexagon-short;
+
+ font-family: "Audiowide", sans-serif;
+ font-size: 14pt;
+ text-align: center;
+ text-transform: uppercase;
+ }
+
+ h2 {
+ font-family: "Montserrat", sans-serif;
+ font-size: 12pt;
+ text-align: center;
+ }
+
+ .sheet-tispace-roll-result {
+ margin-top: 1em;
+
+ font-family: "Audiowide", sans-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/Teens in Space Official/src/scss/tis.scss b/Teens in Space Official/src/scss/tis.scss
new file mode 100644
index 0000000000..446a0e993c
--- /dev/null
+++ b/Teens in Space Official/src/scss/tis.scss
@@ -0,0 +1,623 @@
+@mixin polygon($basewidth) {
+ clip-path: polygon(
+ #{$basewidth*2}rem 0,
+ calc(100% - #{$basewidth * 3}rem) 0,
+ calc(100% - #{$basewidth}rem) #{$basewidth*2}rem,
+ calc(100% - #{$basewidth}rem) 50%,
+ 100% calc(50% + #{$basewidth}rem),
+ 100% calc(100% - #{$basewidth}rem),
+ calc(100% - #{$basewidth}rem) 100%,
+ #{$basewidth}rem 100%,
+ 0 calc(100% - #{$basewidth}rem),
+ 0rem #{$basewidth*2}rem
+ );
+}
+
+@mixin hexagon() {
+ clip-path: polygon(
+ 0 0,
+ 75% 0%,
+ 100% 50%,
+ 75% 100%,
+ 25% 100%,
+ 0 50%,
+ 25% 0%
+ );
+}
+
+@mixin hexagon-short() {
+ clip-path: polygon(
+ 0 0,
+ 90% 0%,
+ 100% 50%,
+ 90% 100%,
+ 10% 100%,
+ 0 50%,
+ 10% 0%
+ );
+}
+
+@mixin arrow() {
+ clip-path: polygon(
+ 0 0,
+ 92.5% 0%,
+ 100% 50%,
+ 92.5% 100%,
+ 0 100%
+ );
+}
+
+@mixin bevel() {
+ clip-path: polygon(
+ 0 0,
+ 100% 0,
+ 80% 100%,
+ 0 100%
+ );
+}
+
+@import url('https://fonts.googleapis.com/css?family=Audiowide|Montserrat:400:800&display=swap');
+
+.sheet-tis-wrapper {
+ position: relative;
+ min-width: 818px;
+ padding: .5em;
+ margin: 0;
+
+ font-family: "Audiowide", sans-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 {
+ margin:0;
+
+ 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 {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ cursor: pointer;
+
+ height: 1.75em;
+
+ 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: 0;
+ 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;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+
+ box-shadow: none;
+ border: 1px solid #000;
+ border-radius: 0;
+
+ 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: 1em .25em;
+ clear: both;
+
+ min-height: 5rem;
+
+ 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-tis {
+
+ &-body {
+ display: grid;
+ grid-template-columns: 2fr 1.5fr;
+ margin-top: 2em;
+ gap: 1em;
+ padding: 1em;
+
+ background: #023;
+
+ @include polygon(3);
+
+ &__stats {
+
+ h2 {
+ margin: 0;
+ margin-left: 1.5em;
+
+ color: #fff !important;
+
+ text-align: left !important;
+ }
+ }
+
+ &__subtext {
+ display: block;
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 11pt;
+ text-align: center;
+ }
+
+ h2 {
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+
+ color: #a00;
+ }
+
+ &__hex {
+ display: grid;
+ grid-template-rows: .5fr 1fr;
+ align-items: center;
+ justify-items: center;
+
+ height: 6.5em;
+ width: 12.5em;
+ margin-left: .5em;
+
+ background: #fff;
+
+ @include hexagon();
+
+ &--first {
+ @extend .sheet-tis-body__hex;
+ margin-top: -2em !important;
+ }
+
+ &:nth-child(even) {
+ position: relative;
+ left: 9.6em;
+ }
+
+ &:not(:first-child) {
+ margin-top: -3.1em;
+ }
+
+ h2 {
+ width: 55%;
+
+ font-size: 8pt;
+ line-height: 8pt;
+ text-align: center;
+ }
+
+ label.sheet-tis-improvement,
+ label.sheet-tis-adversity {
+ height: 100%;
+ }
+
+ input[type="number"] {
+ align-self: center;
+
+ width: 100%;
+ height: 100%;
+
+ border: 0;
+
+ font-size: 30pt;
+ text-align: center;
+ }
+ }
+
+ &__improvements,
+ &__records,
+ &__shiproles,
+ &__backpack {
+ margin-top: 1em;
+ padding: 0 1.5em;
+
+ background: #fff;
+
+ @include polygon(1.5);
+ }
+ }
+
+ &-name {
+ position: absolute;
+ z-index: 1000;
+ width: 60%;
+ height: 5em;
+ padding-left: 2em;
+
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: flex-end;
+
+ @include bevel();
+
+ background: #fff;
+
+ &__label {
+ flex-shrink: 0;
+ text-transform: uppercase;
+
+ font-size: 20pt;
+
+ color: #a00;
+ }
+
+ &__input[type="text"] {
+ flex-grow: 1;
+ height: 30pt;
+ margin-left: .5em;
+ margin-right: 20%;
+
+ border-radius: 0;
+ border: 0;
+
+ font-size: 13pt;
+ font-weight: bold;
+ }
+ }
+
+ &-characteristics {
+ padding: .5em;
+ margin-top: 3em;
+
+ background: #fff;
+
+ @include polygon(1.5);
+
+ h3 {
+ grid-column: 1 / -1;
+
+ &:after {
+ display: inline;
+ content: ":";
+ }
+ }
+
+ &__general,
+ &__wand,
+ &__broom,
+ &__other {
+ @extend .sheet-tis-characteristics;
+ }
+
+ &__general {
+ padding: .5em 0 0 0;
+ }
+
+ &__wand {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ }
+ }
+
+ &-characteristic {
+ grid-column: 1 / -1;
+
+ display: grid;
+ grid-template-columns: .75fr 1fr;
+ align-items: center;
+
+ margin-bottom: .25em;
+
+ &__label {
+ padding: .25em;
+
+ font-size: 10pt;
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+
+ @include arrow();
+
+ color: #fff;
+ background: #023;
+
+ &--description {
+ @extend .sheet-tis-characteristic__label;
+
+ width: 43%;
+ }
+ }
+
+ &__select,
+ &__input[type=number],
+ &__input[type=text] {
+ flex-grow: 1;
+
+ min-width: 0;
+ width: 100%;
+
+ margin: 0;
+ padding: 0;
+
+ text-align: center;
+
+ border: 0;
+ border-bottom: 3px solid #ddd;
+ border-radius: 0;
+ }
+
+ }
+
+ &-stat {
+ display: grid;
+ grid-template-columns: 1fr 25%;
+ grid-template-rows: 2em 1fr;
+ align-items: stretch;
+ height: 6.5em;
+ width: 12.5em;
+ overflow: hidden;
+
+ background: #fff;
+
+ @include hexagon();
+
+ &:nth-child(even) {
+ position: relative;
+ left: 9.6em;
+ }
+
+ &:not(:first-child) {
+ margin-top: -3.1em;
+ }
+
+ &__select {
+ margin-left: 25%;
+ margin-right: .5em;
+ height: 60%;
+ width: auto;
+
+ border: 0;
+
+ font-size: 20pt;
+ line-height: 20pt;
+ text-align: center;
+ }
+
+ &__button {
+ margin-left: 20% !important;
+
+ color: #000;
+ background: transparent;
+ border: none;
+
+ font-size: 10pt !important;
+ line-height: 1.5em;
+ text-align: center;
+ text-transform: uppercase;
+
+ &:before {
+ display: none;
+ }
+
+ &:hover {
+ }
+ }
+
+ &__bonus {
+ position: relative;
+ grid-row: span 2;
+
+ background-color: #bbb;
+ border: none;
+ color: #023;
+
+ input {
+ height: 100%;
+ width: 100%;
+ padding-left: 30%;
+
+ border: none;
+ background: #bbb;
+ color: #023;
+
+ font-family: "Montserrat" sans-serif;
+ font-size: 16pt;
+ }
+
+ &:before {
+ position: absolute;
+ display: inline-block;
+ content: "BONUS";
+
+ top: calc(50% - .75em);
+ left: -2.75em;
+
+ color: #bbb;
+ font-size: 12pt;
+ font-weight: bold;
+ letter-spacing: 2px;
+
+ transform: rotate(-90deg);
+ }
+
+ &:after {
+ position: absolute;
+ display: inline-block;
+ content: "&";
+ top: calc(50% - .9em);
+ left: 2px;
+
+ font-family: "Pictos";
+ font-size: 10pt;
+ font-weight: bold;
+ letter-spacing: 4px;
+
+ transform: rotate(-90deg);
+ }
+ }
+
+ }
+
+ &-body__improvements {
+
+ .repitem:not(:last-child) .sheet-tis-improvementrow {
+ border-bottom: 0;
+ }
+
+ }
+
+ &-improvementrow {
+ display: grid;
+ grid-template-columns: .45fr .5em 1fr;
+
+ border: 2px solid #ddd;
+
+ &--header {
+ @extend .sheet-tis-improvementrow;
+ grid-template-columns: .45fr 1fr;
+
+ border: none;
+
+ * {
+ border: none;
+ color: #023;
+
+ font-size: 10pt;
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+ }
+ }
+
+ &__input {
+ border: 0;
+
+ &:first-child {
+ border-right: 0;
+
+ input[type="text"] {
+ font-weight: bold;
+ }
+ }
+
+ input[type="text"] {
+ width: 100%;
+ padding: 1em 0;
+
+ font-size: 10pt;
+
+ border: 0;
+ border-radius: 0;
+ }
+
+ }
+
+ &__divider {
+ background: #ddd;
+
+ clip-path: polygon(40% 0, 100% 50%, 40% 100%, 0 100%, 65% 50%, 0 0);
+
+ }
+
+ }
+
+ }
+
+}
+
+@import "rolltemplate";
\ No newline at end of file
diff --git a/Teens in Space Official/tis.css b/Teens in Space Official/tis.css
new file mode 100644
index 0000000000..c02b4aa3d7
--- /dev/null
+++ b/Teens in Space Official/tis.css
@@ -0,0 +1,444 @@
+@import url("https://fonts.googleapis.com/css?family=Audiowide|Montserrat:400:800&display=swap");
+.sheet-tis-wrapper {
+ position: relative;
+ min-width: 818px;
+ padding: 0.5em;
+ margin: 0;
+ font-family: "Audiowide", sans-serif;
+ font-size: 10pt;
+}
+.sheet-tis-wrapper * {
+ box-sizing: border-box;
+}
+.sheet-tis-wrapper input {
+ height: 1.75em;
+}
+.sheet-tis-wrapper input[type=number] {
+ -moz-appearance: textfield;
+ text-align: center;
+}
+.sheet-tis-wrapper input[type=number]::-webkit-outer-spin-button, .sheet-tis-wrapper input[type=number]::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+.sheet-tis-wrapper input[type=number],
+.sheet-tis-wrapper input[type=text],
+.sheet-tis-wrapper textarea,
+.sheet-tis-wrapper select {
+ margin: 0;
+ background-color: transparent;
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 12pt;
+ font-variant: normal;
+}
+.sheet-tis-wrapper input[type=number]:hover,
+.sheet-tis-wrapper input[type=text]:hover,
+.sheet-tis-wrapper textarea:hover,
+.sheet-tis-wrapper select:hover {
+ background-color: rgba(0, 0, 0, 0.125);
+}
+.sheet-tis-wrapper select {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ cursor: pointer;
+ height: 1.75em;
+ background: transparent url("https://s3.amazonaws.com/files.d20.io/images/138210258/mZTqw1vke8SrkprMJmiZQw/med.png?1590443723") right 5px center no-repeat;
+}
+.sheet-tis-wrapper textarea {
+ resize: vertical;
+ width: 100%;
+ border: 0;
+ border-radius: 0;
+}
+.sheet-tis-wrapper label {
+ padding: 0;
+ margin: 0;
+}
+.sheet-tis-wrapper .itemcontrol {
+ position: relative;
+}
+.sheet-tis-wrapper .itemcontrol button.repcontrol_del,
+.sheet-tis-wrapper .itemcontrol a.repcontrol_move {
+ display: block;
+ top: calc(50% - 1.5rem);
+ position: relative;
+ padding: 0;
+ margin: 0;
+ height: 3rem;
+ width: 3rem;
+ box-shadow: none;
+ border: 1px solid #000;
+ border-radius: 0;
+ line-height: 2em;
+ text-shadow: none;
+ font-weight: bold;
+}
+.sheet-tis-wrapper .itemcontrol button.repcontrol_del {
+ margin-right: 0.25rem;
+ background: #a00;
+ color: #fff;
+}
+.sheet-tis-wrapper .itemcontrol a.repcontrol_move {
+ margin-left: 0.25rem;
+ background: transparent;
+ color: #000;
+}
+.sheet-tis-wrapper .repcontrol {
+ padding: 1em 0.25em;
+ clear: both;
+ min-height: 5rem;
+ background-color: transparent;
+}
+.sheet-tis-wrapper .repcontrol button.repcontrol_add,
+.sheet-tis-wrapper .repcontrol button.repcontrol_del,
+.sheet-tis-wrapper .repcontrol button.repcontrol_move,
+.sheet-tis-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-tis-wrapper .repcontrol button.repcontrol_add:before {
+ display: block;
+ content: "&";
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+}
+.sheet-tis-wrapper .repcontrol button.repcontrol_edit:before {
+ display: block;
+ content: "p";
+ right: 5px;
+ font-family: "Pictos";
+ font-size: 12pt;
+ font-weight: bold;
+}
+.sheet-tis-wrapper .sheet-tis-body {
+ display: grid;
+ grid-template-columns: 2fr 1.5fr;
+ margin-top: 2em;
+ gap: 1em;
+ padding: 1em;
+ background: #023;
+ clip-path: polygon(6rem 0, calc(100% - 9rem) 0, calc(100% - 3rem) 6rem, calc(100% - 3rem) 50%, 100% calc(50% + 3rem), 100% calc(100% - 3rem), calc(100% - 3rem) 100%, 3rem 100%, 0 calc(100% - 3rem), 0rem 6rem);
+}
+.sheet-tis-wrapper .sheet-tis-body__stats h2 {
+ margin: 0;
+ margin-left: 1.5em;
+ color: #fff !important;
+ text-align: left !important;
+}
+.sheet-tis-wrapper .sheet-tis-body__subtext {
+ display: block;
+ font-family: "Montserrat", Verdana, sans-serif;
+ font-size: 11pt;
+ text-align: center;
+}
+.sheet-tis-wrapper .sheet-tis-body h2 {
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+ color: #a00;
+}
+.sheet-tis-wrapper .sheet-tis-body__hex, .sheet-tis-wrapper .sheet-tis-body__hex--first {
+ display: grid;
+ grid-template-rows: 0.5fr 1fr;
+ align-items: center;
+ justify-items: center;
+ height: 6.5em;
+ width: 12.5em;
+ margin-left: 0.5em;
+ background: #fff;
+ clip-path: polygon(0 0, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0 50%, 25% 0%);
+}
+.sheet-tis-wrapper .sheet-tis-body__hex--first {
+ margin-top: -2em !important;
+}
+.sheet-tis-wrapper .sheet-tis-body__hex:nth-child(even), .sheet-tis-wrapper .sheet-tis-body__hex--first:nth-child(even) {
+ position: relative;
+ left: 9.6em;
+}
+.sheet-tis-wrapper .sheet-tis-body__hex:not(:first-child), .sheet-tis-wrapper .sheet-tis-body__hex--first:not(:first-child) {
+ margin-top: -3.1em;
+}
+.sheet-tis-wrapper .sheet-tis-body__hex h2, .sheet-tis-wrapper .sheet-tis-body__hex--first h2 {
+ width: 55%;
+ font-size: 8pt;
+ line-height: 8pt;
+ text-align: center;
+}
+.sheet-tis-wrapper .sheet-tis-body__hex label.sheet-tis-improvement, .sheet-tis-wrapper .sheet-tis-body__hex--first label.sheet-tis-improvement,
+.sheet-tis-wrapper .sheet-tis-body__hex label.sheet-tis-adversity,
+.sheet-tis-wrapper .sheet-tis-body__hex--first label.sheet-tis-adversity {
+ height: 100%;
+}
+.sheet-tis-wrapper .sheet-tis-body__hex input[type=number], .sheet-tis-wrapper .sheet-tis-body__hex--first input[type=number] {
+ align-self: center;
+ width: 100%;
+ height: 100%;
+ border: 0;
+ font-size: 30pt;
+ text-align: center;
+}
+.sheet-tis-wrapper .sheet-tis-body__improvements, .sheet-tis-wrapper .sheet-tis-body__records, .sheet-tis-wrapper .sheet-tis-body__shiproles, .sheet-tis-wrapper .sheet-tis-body__backpack {
+ margin-top: 1em;
+ padding: 0 1.5em;
+ background: #fff;
+ clip-path: polygon(3rem 0, calc(100% - 4.5rem) 0, calc(100% - 1.5rem) 3rem, calc(100% - 1.5rem) 50%, 100% calc(50% + 1.5rem), 100% calc(100% - 1.5rem), calc(100% - 1.5rem) 100%, 1.5rem 100%, 0 calc(100% - 1.5rem), 0rem 3rem);
+}
+.sheet-tis-wrapper .sheet-tis-name {
+ position: absolute;
+ z-index: 1000;
+ width: 60%;
+ height: 5em;
+ padding-left: 2em;
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: flex-end;
+ clip-path: polygon(0 0, 100% 0, 80% 100%, 0 100%);
+ background: #fff;
+}
+.sheet-tis-wrapper .sheet-tis-name__label {
+ flex-shrink: 0;
+ text-transform: uppercase;
+ font-size: 20pt;
+ color: #a00;
+}
+.sheet-tis-wrapper .sheet-tis-name__input[type=text] {
+ flex-grow: 1;
+ height: 30pt;
+ margin-left: 0.5em;
+ margin-right: 20%;
+ border-radius: 0;
+ border: 0;
+ font-size: 13pt;
+ font-weight: bold;
+}
+.sheet-tis-wrapper .sheet-tis-characteristics, .sheet-tis-wrapper .sheet-tis-characteristics__general, .sheet-tis-wrapper .sheet-tis-characteristics__wand, .sheet-tis-wrapper .sheet-tis-characteristics__broom, .sheet-tis-wrapper .sheet-tis-characteristics__other {
+ padding: 0.5em;
+ margin-top: 3em;
+ background: #fff;
+ clip-path: polygon(3rem 0, calc(100% - 4.5rem) 0, calc(100% - 1.5rem) 3rem, calc(100% - 1.5rem) 50%, 100% calc(50% + 1.5rem), 100% calc(100% - 1.5rem), calc(100% - 1.5rem) 100%, 1.5rem 100%, 0 calc(100% - 1.5rem), 0rem 3rem);
+}
+.sheet-tis-wrapper .sheet-tis-characteristics h3, .sheet-tis-wrapper .sheet-tis-characteristics__general h3, .sheet-tis-wrapper .sheet-tis-characteristics__wand h3, .sheet-tis-wrapper .sheet-tis-characteristics__broom h3, .sheet-tis-wrapper .sheet-tis-characteristics__other h3 {
+ grid-column: 1/-1;
+}
+.sheet-tis-wrapper .sheet-tis-characteristics h3:after, .sheet-tis-wrapper .sheet-tis-characteristics__general h3:after, .sheet-tis-wrapper .sheet-tis-characteristics__wand h3:after, .sheet-tis-wrapper .sheet-tis-characteristics__broom h3:after, .sheet-tis-wrapper .sheet-tis-characteristics__other h3:after {
+ display: inline;
+ content: ":";
+}
+.sheet-tis-wrapper .sheet-tis-characteristics__general {
+ padding: 0.5em 0 0 0;
+}
+.sheet-tis-wrapper .sheet-tis-characteristics__wand {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+}
+.sheet-tis-wrapper .sheet-tis-characteristic {
+ grid-column: 1/-1;
+ display: grid;
+ grid-template-columns: 0.75fr 1fr;
+ align-items: center;
+ margin-bottom: 0.25em;
+}
+.sheet-tis-wrapper .sheet-tis-characteristic__label, .sheet-tis-wrapper .sheet-tis-characteristic__label--description {
+ padding: 0.25em;
+ font-size: 10pt;
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+ clip-path: polygon(0 0, 92.5% 0%, 100% 50%, 92.5% 100%, 0 100%);
+ color: #fff;
+ background: #023;
+}
+.sheet-tis-wrapper .sheet-tis-characteristic__label--description {
+ width: 43%;
+}
+.sheet-tis-wrapper .sheet-tis-characteristic__select, .sheet-tis-wrapper .sheet-tis-characteristic__input[type=number], .sheet-tis-wrapper .sheet-tis-characteristic__input[type=text] {
+ flex-grow: 1;
+ min-width: 0;
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+ border: 0;
+ border-bottom: 3px solid #ddd;
+ border-radius: 0;
+}
+.sheet-tis-wrapper .sheet-tis-stat {
+ display: grid;
+ grid-template-columns: 1fr 25%;
+ grid-template-rows: 2em 1fr;
+ align-items: stretch;
+ height: 6.5em;
+ width: 12.5em;
+ overflow: hidden;
+ background: #fff;
+ clip-path: polygon(0 0, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0 50%, 25% 0%);
+}
+.sheet-tis-wrapper .sheet-tis-stat:nth-child(even) {
+ position: relative;
+ left: 9.6em;
+}
+.sheet-tis-wrapper .sheet-tis-stat:not(:first-child) {
+ margin-top: -3.1em;
+}
+.sheet-tis-wrapper .sheet-tis-stat__select {
+ margin-left: 25%;
+ margin-right: 0.5em;
+ height: 60%;
+ width: auto;
+ border: 0;
+ font-size: 20pt;
+ line-height: 20pt;
+ text-align: center;
+}
+.sheet-tis-wrapper .sheet-tis-stat__button {
+ margin-left: 20% !important;
+ color: #000;
+ background: transparent;
+ border: none;
+ font-size: 10pt !important;
+ line-height: 1.5em;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-tis-wrapper .sheet-tis-stat__button:before {
+ display: none;
+}
+.sheet-tis-wrapper .sheet-tis-stat__bonus {
+ position: relative;
+ grid-row: span 2;
+ background-color: #bbb;
+ border: none;
+ color: #023;
+}
+.sheet-tis-wrapper .sheet-tis-stat__bonus input {
+ height: 100%;
+ width: 100%;
+ padding-left: 30%;
+ border: none;
+ background: #bbb;
+ color: #023;
+ font-family: "Montserrat" sans-serif;
+ font-size: 16pt;
+}
+.sheet-tis-wrapper .sheet-tis-stat__bonus:before {
+ position: absolute;
+ display: inline-block;
+ content: "BONUS";
+ top: calc(50% - .75em);
+ left: -2.75em;
+ color: #bbb;
+ font-size: 12pt;
+ font-weight: bold;
+ letter-spacing: 2px;
+ transform: rotate(-90deg);
+}
+.sheet-tis-wrapper .sheet-tis-stat__bonus:after {
+ position: absolute;
+ display: inline-block;
+ content: "&";
+ top: calc(50% - .9em);
+ left: 2px;
+ font-family: "Pictos";
+ font-size: 10pt;
+ font-weight: bold;
+ letter-spacing: 4px;
+ transform: rotate(-90deg);
+}
+.sheet-tis-wrapper .sheet-tis-body__improvements .repitem:not(:last-child) .sheet-tis-improvementrow, .sheet-tis-wrapper .sheet-tis-body__improvements .repitem:not(:last-child) .sheet-tis-improvementrow--header {
+ border-bottom: 0;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow, .sheet-tis-wrapper .sheet-tis-improvementrow--header {
+ display: grid;
+ grid-template-columns: 0.45fr 0.5em 1fr;
+ border: 2px solid #ddd;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow--header {
+ grid-template-columns: 0.45fr 1fr;
+ border: none;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow--header * {
+ border: none;
+ color: #023;
+ font-size: 10pt;
+ font-weight: normal;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow__input {
+ border: 0;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow__input:first-child {
+ border-right: 0;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow__input:first-child input[type=text] {
+ font-weight: bold;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow__input input[type=text] {
+ width: 100%;
+ padding: 1em 0;
+ font-size: 10pt;
+ border: 0;
+ border-radius: 0;
+}
+.sheet-tis-wrapper .sheet-tis-improvementrow__divider {
+ background: #ddd;
+ clip-path: polygon(40% 0, 100% 50%, 40% 100%, 0 100%, 65% 50%, 0 0);
+}
+
+.sheet-rolltemplate-tispace .sheet-tispace-container {
+ display: block;
+ padding: 1em;
+ border: 1px solid #023;
+ background: #fff;
+}
+.sheet-rolltemplate-tispace .sheet-tispace-container h1 {
+ width: 80%;
+ margin: auto;
+ color: #fff;
+ background: #023;
+ clip-path: polygon(0 0, 90% 0%, 100% 50%, 90% 100%, 10% 100%, 0 50%, 10% 0%);
+ font-family: "Audiowide", sans-serif;
+ font-size: 14pt;
+ text-align: center;
+ text-transform: uppercase;
+}
+.sheet-rolltemplate-tispace .sheet-tispace-container h2 {
+ font-family: "Montserrat", sans-serif;
+ font-size: 12pt;
+ text-align: center;
+}
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result {
+ margin-top: 1em;
+ font-family: "Audiowide", sans-serif;
+ font-size: 14pt;
+ text-align: center;
+}
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result .importantroll,
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result .fullcrit,
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result .fullfail,
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result .inlinerollresult {
+ border: none;
+ background: transparent;
+ font-family: inherit;
+ line-height: 1em;
+}
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result .importantroll {
+ color: #3e7bff;
+}
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result .fullcrit {
+ color: #4cc016;
+}
+.sheet-rolltemplate-tispace .sheet-tispace-container .sheet-tispace-roll-result .fullfail {
+ color: #900;
+}
diff --git a/Teens in Space Official/tis.html b/Teens in Space Official/tis.html
new file mode 100644
index 0000000000..fda839b38c
--- /dev/null
+++ b/Teens in Space Official/tis.html
@@ -0,0 +1,179 @@
+
+
+
+
Name
+
+
+
+
+
+
+
Stats
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Adversity Tokens
+
+
+
+
Improvement Points
+
+
+
+
Ship Roles
+
+
+
+
Space Backpack
+
+
+
+
+
+
+ {{#name}}
+
{{name}}
{{/name}}
+
{{#character_name}}
+
{{character_name}}
{{/character_name}}
+ {{#roll}}
+
Result: {{roll}}
{{/roll}}
+
+
+
\ No newline at end of file
diff --git a/Teens in Space Official/tis.png b/Teens in Space Official/tis.png
new file mode 100644
index 0000000000..ada6e290ea
Binary files /dev/null and b/Teens in Space Official/tis.png differ
diff --git a/Teens in Space Official/translation.json b/Teens in Space Official/translation.json
new file mode 100644
index 0000000000..ac5ab32971
--- /dev/null
+++ b/Teens in Space Official/translation.json
@@ -0,0 +1,24 @@
+{
+ "Name": "Name",
+ "Age":"Age",
+ "Species":"Species",
+ "Species Drawback":"Species Drawback",
+ "Trope":"Trope",
+ "Fatal Flaw":"Fatal Flaw",
+ "Description":"Description",
+ "Stats":"Stats",
+ "Fight":"Fight",
+ "Flight":"Flight",
+ "Brains":"Brains",
+ "Brawn":"Brawn",
+ "Charm":"Charm",
+ "Grit":"Grit",
+ "Improvements":"Improvements",
+ "Records":"Records",
+ "Adversity Tokens":"Adversity Tokens",
+ "Improvement Points":"Improvement Points",
+ "Space Backpack":"Space Backpack",
+ "Strength Name": "Strength Name",
+ "Strength Effects": "Strength Effects",
+ "Ship Roles": "Ship Roles"
+}
\ No newline at end of file
diff --git a/approved.yaml b/approved.yaml
index 348ead13c0..3fa066923d 100644
--- a/approved.yaml
+++ b/approved.yaml
@@ -13,6 +13,12 @@ agonofficial:
- "Agon"
- "publisher"
+alteredcarbonofficial:
+ - 'Altered Carbon Official'
+ - 'Altered Carbon by Hunters Entertainment"'
+ - 'Hazard System'
+ - 'publisher'
+
bandofbladesofficial:
- "Band of Blades Official"
- "Band of Blades by Evil Hat Productions"
@@ -67,6 +73,12 @@ kidsonbikesofficial:
- "Kids on Bikes"
- "publisher"
+kidsonbroomsofficial:
+ - 'Kids on Brooms Official'
+ - 'Kids on Brooms by Hunters Entertainment"'
+ - 'Kids on Bikes'
+ - 'publisher'
+
talesfromtheloopofficial:
- "Tales from the Loop Official"
- "Tales from the Loop by Free League Publishing"
@@ -115,6 +127,12 @@ swordandscoundreloofficial:
- "Sword & Scoundrel"
- "publisher"
+teensinspaceofficial:
+ - 'Teens in Space Official'
+ - 'Teens in Space by Hunters Entertainment"'
+ - 'GLORY'
+ - 'publisher'
+
tesoroygloriaofficial:
- "Tesoro-y-Gloria"
- "Tesoro y Gloria by Telmo Arnedo"