diff --git a/Dragonslayer/dragonslayer.css b/Dragonslayer/dragonslayer.css new file mode 100644 index 0000000000..1746eda478 --- /dev/null +++ b/Dragonslayer/dragonslayer.css @@ -0,0 +1,1711 @@ + +/* ======================================== */ +/* Global Styles */ +/* ======================================== */ +@import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;700&display=swap"); + +.charsheet { + min-width: 850px; + max-width: 850px; + margin: 0 auto; + overflow-x: hidden; +} + +.charsheet * { + box-sizing: border-box; + max-width: 100%; +} + +.charsheet, .monsheet { + font-family: "Cormorant Garamond", "Times New Roman", serif; + margin: 0; + padding: 0; +} + +/* Logo row */ + +/* Shared input styles */ + +.charsheet input, .monsheet input { + border: none; + border-bottom: 2px solid rgb(97, 97, 97); + border-radius: 0; + padding: 5px; + font-size: 1.2em; + outline: none; + background: transparent; + width: 100%; + font-family: "Proxima Nova"; +} + +.charsheet label, .monsheet label { + font-size: 1.2em; + font-weight: bold; + margin-top: 5px; + text-align: left; +} + + + + + .pc-weapon-table thead tr { + position: absolute; + top: -9999px; + left: -9999px; + } + + .pc-weapon-table tbody tr { + margin-bottom: 12px; + } + + .pc-weapon-table tbody td { + position: relative; + padding-left: 50%; + text-align: left; + border: none; + border-bottom: 1px solid #ddd; + } + + /* Label each field in “stacked” mode */ + .pc-weapon-table tbody td:before { + position: absolute; + top: 6px; + left: 8px; + width: 45%; + white-space: nowrap; + font-weight: bold; + font-size: 0.9em; + color: #333; + } + .pc-weapon-table tbody td:nth-of-type(1):before { content: ""; } + .pc-weapon-table tbody td:nth-of-type(2):before { content: "Weapon"; } + .pc-weapon-table tbody td:nth-of-type(3):before { content: "Type"; } + .pc-weapon-table tbody td:nth-of-type(4):before { content: "Hit Mod."; } + .pc-weapon-table tbody td:nth-of-type(5):before { content: "DMG"; } + .pc-weapon-table tbody td:nth-of-type(6):before { content: "DMG Mod."; } + .pc-weapon-table tbody td:nth-of-type(7):before { content: "Notes"; } + + + + +button[type="roll"] { + background: #671c1c; + border: 2px solid black; + width: 25px; + height: 25px; + cursor: pointer; + color: white; + padding: 0 !important; + margin: 0 !important; +} + + + +.sheet-pc-info-row > .sheet-pc-info-section { + min-width: 0; +} + +.toggle-sheet-btn { + position: fixed; + top: 10px; + right: 10px; + z-index: 1000; + padding: 5px 10px; + font-size: 1em; + cursor: pointer; + font-family: "Proxima Nova"; + } + +.charsheet, + +/* ======================================== */ +/* Monster Sheet */ +/* ======================================== */ + .monsheet { + display: none; + } + +.sheet-mode-toggle[value="pc"] ~ .charsheet { + display: block; + } + +.sheet-mode-toggle[value="monster"] ~ .monsheet { + display: block; + } + +.charsheet { + padding-top: 0px !important; +} + +.sheet-header-container { + width: 100%; + padding: 0px; + box-sizing: border-box; +} + + +/* ======================================== */ +/* Logo Row */ +/* ======================================== */ +.sheet-logo-row { + text-align: center; + font-size: 2em; + font-weight: bold; + text-transform: uppercase; + margin-bottom: 10px; + padding-bottom: 10px; +} + +.sheet-header-container label { + margin-bottom: 0px; + font-size: 1.3em; +} + + +/* ======================================== */ +/* Header Rows */ +/* ======================================== */ +.sheet-header-row, + +/* ======================================== */ +/* Alignment & Languages Rows */ +/* ======================================== */ +.sheet-alignment-row, +.sheet-age-row { + display: grid; + gap: 10px; +} + +.sheet-header-row { + grid-template-columns: 2fr 2fr 1fr 1fr; +} + +.sheet-alignment-row { + grid-template-columns: 1fr 1fr; +} + +.sheet-pc-info-row { + display: grid; + grid-template-columns: 2fr 2fr 2fr; + gap: 10px; + text-align: center; + align-items: flex-start; +} + + +/* ======================================== */ +/* PC Stats Row */ +/* ======================================== */ +.sheet-pc-stats-row { + display: grid; + grid-template-columns: 1fr 2fr 2fr; + gap: 10px; + margin-top: 20px; + text-align: center; + align-items: flex-start; +} + +.sheet-pc-info-section { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + padding: 10px; +} + +.sheet-pc-info-section h3 { + margin: 0 0 5px 0; + font-size: 1.7em; + font-weight: bold; +} + +.sheet-pc-attributes h3, +.sheet-pc-attribute-mods h3 + { + margin: 0 0 10px 0; + font-size: 2em; + font-weight: bold; + text-align: LEFT; +} + + +/* ======================================== */ +/* Weapons Table */ +/* ======================================== */ +.sheet-weapon-table h3 { + font-size: 2em; + font-weight: bold; + text-align: center; + margin-top:10px; +} + +.sheet-weapon-table { + width: 100%; + margin-bottom: 1em; + border-bottom: 2px solid black; + padding-bottom: 10px; +} + +.sheet-pc-attribute-mods h3 { + margin: 0 0 10px 0; + font-size: 2em; + font-weight: bold; + text-align: center; +} + +.sheet-pc-saving-throws h3 { + margin: 0 0 10px 0; + font-size: 2em; + font-weight: bold; +} + +.sheet-pc-info-section .armor-class-container { + position: relative; + width: 185px; + height: 85px; + background: url("https://raw.githubusercontent.com/Todd-Antill/dragonslayer_roll20/refs/heads/main/images/ac_icon.png") no-repeat center; + background-size: contain; + display: flex; + justify-content: center; + align-items: center; + margin-bottom:20px; +} + +.armor-description-container label { + +margin-bottom:0px; +} + +.sheet-pc-info-section input[name="attr_armor-class"] { + height: 68px !important; + width: 65%; + border: 0; + text-align: center; + font-size: xx-large; + color: #6b6b6b; + padding-bottom: 10px; +} + +.sheet-pc-info-section .hp-container { + position: relative; + width: 130px; + height: 85px; + background: url("https://raw.githubusercontent.com/Todd-Antill/dragonslayer_roll20/refs/heads/main/images/hp_icon.png") no-repeat center; + background-size: contain; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.sheet-pc-info-section .atk-bonus-container,.movement-container { + position: relative; + width: 100px; + height: 100px; + background: url("https://raw.githubusercontent.com/Todd-Antill/dragonslayer_roll20/refs/heads/main/images/dsr_box.png") no-repeat center; + background-size: contain; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.movement-hdr { + margin: 55px 0 0 0 !important; +} + +.atk-bonus-hdr { + margin: 5px 0 0 0 !important; +} + + +/* ======================================== */ +/* Experience & Attack Bonus */ +/* ======================================== */ +.xp-container { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 10px; + align-items: end; + +} + +.sheet-pc-info-section input[name="attr_current-hp"], +.sheet-pc-info-section input[name="attr_max-hp"], +.atk-bonus-container input[name="attr_attack-bonus"], + +/* ======================================== */ +/* Hit Points & Movement */ +/* ======================================== */ +.movement-container input[name="attr_movement"] + +{ + width: 100%; + height: 35px; + border: none; + background: transparent; + text-align: center; + font-size: x-large; + color: #6b6b6b; + outline: none; +} + +.xp-container-next-level { + width: 100%; + +} + + +.sheet-pc-info-section label.curr-hp-label { + font-size: .7em; + color: rgb(50, 50, 50); + background: transparent; + padding: 2px 5px; + pointer-events: none; + position: absolute; + top: 25px; + left: 40px; +} + +.sheet-pc-info-section label.max-hp-label { + font-size: .7em; + color: rgb(50, 50, 50); + background: transparent; + padding: 2px 5px; + pointer-events: none; + position: absolute; + top: 75px; + left: 50px; +} + + + +/* ======================================== */ +/* Shared Inputs & Labels */ +/* ======================================== */ +input.move-input { + + text-align: center; + font-size: x-large; + font-weight: bold; +} + +.ui-dialog .charsheet input[type=number] { + text-align: center; +} + + +/* ======================================== */ +/* Abilities Section */ +/* ======================================== */ +.sheet-abilities { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 10px; +} + +.sheet-ability { + display: flex; + align-items: center; + gap: 5px; + min-height: 25px; +} + +.charsheet .hex-container { + position: relative; + width: 50px; + height: 50px; + background: url("https://raw.githubusercontent.com/Todd-Antill/dragonslayer_roll20/refs/heads/main/images/hex-stat.png") no-repeat center; + background-size: contain; + display: flex; + justify-content: center; + align-items: center; +} + +.charsheet .hex-input { + width: 50px; + + background: transparent; + border: none; + text-align: center; + font-size: 1.2em; + font-weight: bold; + color: #6b6b6b; + outline: none; +} + +.sheet-ability label { + font-size: 1.7em; + font-weight: bold; +} + +.sheet-ability button[type="roll"], .weapon-row button[type="roll"] { + width: 25px !important; + height: 25px !important; + min-width: 25px !important; + min-height: 25px !important; + background: #671c1c; + border: 2px solid black; + padding: 0 !important; + margin: 0 !important; + display: flex; + justify-content: center; + align-items: center; +} + +.sheet-ability button[type="roll"].btn { + width: 25px !important; + height: 25px !important; +} + +.sheet-pc-attribute-mods { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 10px; +} + +.sheet-modifiers { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 5px; + width: 100%; +} + + +/* ======================================== */ +/* Modifiers Section */ +/* ======================================== */ +.sheet-modifier { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0; + align-items: center; + width: 100%; + position: relative; + +} + +.sheet-modifier input { + width: 100%; + border: none; + border-bottom: 2px solid rgb(97, 97, 97); + padding: 5px; + font-size: 1.2em; + text-align: center; + background: transparent; + outline: none; +} + +.sheet-modifier label { + font-size: 1.1em; + font-weight: bold; + text-align: left; + margin-top: 3px; + /* Push labels below inputs */ + display: block; + width: 100%; + margin-bottom: 2px; +} + +.sheet-modifier:has(input:only-of-type) { + display: flex; + flex-direction: column; + align-items: center; + +} + +.sheet-modifier:has(input:only-of-type) input { + width: 100%; +} + +.sheet-modifier:has(input:only-of-type) label { + margin-top: 3px; + width: 100%; + padding-right: 0; +} + +.sheet-modifier input:nth-of-type(2), +.sheet-modifier label:nth-of-type(2) { + margin-left: 5px; +} + + +/* ======================================== */ +/* Saving Throws */ +/* ======================================== */ + +/* Container for one spell line */ +/* Container for one spell line */ + + + + + +.sheet-saving-throws-container { + display: flex; + flex-direction: column; + /* Stack title and section */ + margin-left: 30px +} + +.sheet-saving-throws-wrapper { + display: flex; + flex-direction: row; + /* Keep buttons and saving throws in a row */ + align-items: left; + gap: 10px; +} + +.sheet-saving-throws { + position: relative; + width: 75px; + height: 340px; + background: url("https://raw.githubusercontent.com/Todd-Antill/dragonslayer_roll20/refs/heads/main/images/saving_throw_box.png") no-repeat; + background-position: top center; + background-size: contain; +} + +.sheet-saving-throws-buttons { + position: relative; + width: 25px; + height: 340px; + +} + +.sheet-saving-throws-buttons button { + position: absolute; + left: 0; + width: 25px !important; + height: 25px !important; + background: #671c1c; + border: 2px solid black; + color: white; + padding: 0 !important; + display: flex; + justify-content: center; + align-items: center; +} + +.sheet-saving-throws input { + position: absolute; + width: 40px; + height: 40px; + background: transparent; + border: none; + text-align: center; + font-size: 1.4em; + font-weight: bold; + color: #6b6b6b; + outline: none; + left: 50%; + transform: translateX(-50%); +} + +.sheet-saving-throws label { + position: absolute; + left: 95px; + font-size: 2em; + font-weight: bold; + color: black; + white-space: nowrap; +} + +.sheet-saving-throws .breath+label { + top: 25px; +} + +.sheet-saving-throws .death+label { + top: 90px; +} + +.sheet-saving-throws .stone+label { + top: 150px; +} + +.sheet-saving-throws .wand+label { + top: 215px; +} + +.sheet-saving-throws .spell+label { + top: 275px; +} + +.sheet-saving-throws .breath { + top: 20px; + left: 36px +} + +.sheet-saving-throws .death { + top: 80px; + left: 36px +} + +.sheet-saving-throws .stone { + top: 142px; + left: 36px +} + +.sheet-saving-throws .wand { + top: 205px; + left: 36px +} + +.sheet-saving-throws .spell { + top: 264px; + left: 36px +} + +.sheet-saving-throws-buttons button:nth-child(1) { + top: 25px; +} + +.sheet-saving-throws-buttons button:nth-child(2) { + top: 85px; +} + +.sheet-saving-throws-buttons button:nth-child(3) { + top: 145px; +} + +.sheet-saving-throws-buttons button:nth-child(4) { + top: 210px; +} + +.sheet-saving-throws-buttons button:nth-child(5) { + top: 270px; +} + +.sheet-rolltemplate-savingthrow .inlinerollresult { + background: #f8f8f8; + border: 1px solid #ccc; + padding: 2px 5px; + border-radius: 3px; + font-weight: bold; + display: inline-block; + min-width: 25px; + text-align: center; +} + +.sheet-rolltemplate-attack .sheet-header { + background: #222; + color: white; + text-align: center; + font-weight: bold; + padding: 5px; + border-radius: 5px 5px 0 0; + line-height: 1.7em !important; +} + +.sheet-rolltemplate-pc_attack_roll { + line-height: 1.6em !important; + padding-bottom: 5px; +} + +.sheet-rolltemplate-pc_attack_roll .sheet-crit~.sheet-normal-damage { + display: none; +} + +.charsheet .sheet-tab-buttons { + display: inline-block; + border-bottom: 1px solid #ccc; + margin-bottom: 10px; + width: 100%; +} + +.charsheet .sheet-tab-buttons button { + background: none; + border: none; + padding: 6px 12px; + margin-right: 4px; + margin-bottom: -1px; + cursor: pointer; + color: #666; + font-size: 1.4em; + font-family: inherit; + outline: none; +} + +.charsheet .sheet-tab-buttons button:hover { + color: #000; +} + +.charsheet .sheet-tabstoggle[value="main"] ~ .sheet-tab-buttons .sheet-button0, +.charsheet .sheet-tabstoggle[value="equipment"] ~ .sheet-tab-buttons .sheet-button1, +.charsheet .sheet-tabstoggle[value="abilities"] ~ .sheet-tab-buttons .sheet-button2, +.charsheet .sheet-tabstoggle[value="spells"] ~ .sheet-tab-buttons .sheet-button3, +.charsheet .sheet-tabstoggle[value="wealth"] ~ .sheet-tab-buttons .sheet-button4, +.charsheet .sheet-tabstoggle[value="henchmen"] ~ .sheet-tab-buttons .sheet-button5, +.charsheet .sheet-tabstoggle[value="notes"] ~ .sheet-tab-buttons .sheet-button6 + { + background: #fff; + border: 1px solid #ccc; + border-bottom: 1px solid #fff; + color: #000; + font-weight: bold; + margin-bottom: -1px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.charsheet .sheet-main-tab, +.charsheet .sheet-equipment-tab, +.charsheet .sheet-abilities-tab, +.charsheet .sheet-spells-tab, +.charsheet .sheet-wealth-tab, +.charsheet .sheet-hireling-tab, +.charsheet .sheet-notes-tab { + display: none; +} + +.charsheet .sheet-tabstoggle[value="main"] ~ .sheet-tab-content .sheet-main-tab, +.charsheet .sheet-tabstoggle[value="equipment"] ~ .sheet-tab-content .sheet-equipment-tab, +.charsheet .sheet-tabstoggle[value="abilities"] ~ .sheet-tab-content .sheet-abilities-tab, +.charsheet .sheet-tabstoggle[value="spells"] ~ .sheet-tab-content .sheet-spells-tab, +.charsheet .sheet-tabstoggle[value="wealth"] ~ .sheet-tab-content .sheet-wealth-tab, +.charsheet .sheet-tabstoggle[value="henchmen"] ~ .sheet-tab-content .sheet-hireling-tab , +.charsheet .sheet-tabstoggle[value="notes"] ~ .sheet-tab-content .sheet-notes-tab +{ + display: block; +} + + +/* ======================================== */ +/* Equipment Tab */ +/* ======================================== */ +.sheet-equipment-tab .equipment-columns { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; +} + +.sheet-equipment-tab .equipment-column { + display: flex; + flex-direction: column; +} + +.equipment-entry { + margin-bottom: 10px; +} + +.equipment-entry input { + + font-size:1.1em; +} + + +/* ======================================== */ +/* Abilities Tab */ +/* ======================================== */ +.sheet-abilities-tab .abilities-columns { + display: flex; + gap: 10px; +} + +.sheet-abilities-tab .abilities-column { + width: 60%; + margin-right:20px; +} + +.sheet-abilities-tab .thief-skills-column { + width: 40%; +} + +.thief-skills-list .thief-skill { + display: grid; + grid-template-columns: min-content 1fr min-content; + align-items: center; + gap: 10px; + margin-bottom: 20px; +} + +.thief-skill .skill-name { + font-size: 1.4em; + font-weight: bold; + display: flex; + align-items: center; +} + +.thief-skill button[type="roll"] { + background: #671c1c; + border: 2px solid black; + width: 25px; + height: 25px; + cursor: pointer; + padding: 0; + display: flex; + justify-content: center; + align-items: center; +} + +.thief-skill input { + border: none; + border: 2px solid rgb(97, 97, 97); + padding: 5px; + font-size: 1.3em; + background: transparent; + width: 60px; + text-align: center +} + +.ability-entry textarea { + height:85px; + font-family: "Proxima Nova"; +} + +.sheet-abilities-tab button { + font-family: "Proxima Nova"; +} + + + + +.spells-per-day { + margin-bottom: 20px; +} + +.spells-per-day-wrapper { + display: flex; + align-items: center; +} + +.spells-per-day-left { + flex: 0 0 auto; + text-align: left; + padding-right: 10px; + font-weight: bold; +} + +.spells-per-day-label, +.spells-level-label { + margin-top: 10px; + font-size: 1.4em; +} + +.spells-level-label { + margin-top: 20px; +} + +.spells-per-day-right { + flex: 1; +} + +.spells-per-day-inputs { + display: flex; + justify-content: space-between; +} + +.spells-per-day-inputs input { + width: calc((100% - 16px) / 9); + text-align: center; + border: 2px solid black; + padding: 2px; + height: 45px !important; + margin: 5px; +} + +.spells-per-day-numbers { + display: flex; + justify-content: space-between; + margin-top: 4px; +} + +.spells-per-day-numbers span { + width: calc((100% - 16px) / 9); + text-align: center; + font-size: 1.5em; +} + +.spells-list { + display: flex; + gap: 20px; +} + +.spells-list-column { + width: 50%; +} + +.spell-level-entry { + margin-bottom: 15px; +} + +.spells-list-header { + text-align: left; + font-weight: bold; + margin-bottom: 4px; + font-size: 1.2em; + border-bottom: 2px solid rgb(43, 43, 43) !important; + border-top: 2px solid rgb(43, 43, 43) !important; + background-color: rgb(247 247 247) !important; + padding-left: 5px; +} + +.spells-list-column fieldset { + margin: 0 0 10px; + padding: 5px; + border: 1px solid #ccc; +} + +/* ==== Updated .spell-entry section using GRID ==== */ +.spell-entry { + display: grid; + grid-template-columns: 20px 1fr; + align-items: center; + gap: 8px; + padding: 2px 4px; +} + +.spell-entry input[type="checkbox"] { + width: 16px; + height: 16px; + margin: 0; + accent-color: #671c1c; + box-sizing: border-box; +} + +.spell-entry input[type="text"] { + width: 100%; + padding: 4px; + font-size: 1em; + line-height: 1.2em; + border-bottom: 2px solid rgb(223, 223, 223); + margin: 0; + box-sizing: border-box; +} + +/* Optional: visual style when spell is memorized */ +.spell-entry input[type="checkbox"]:checked + input[type="text"] { + font-weight: bold; + color: #671c1c; + text-decoration: underline; +} + +/* Header row for spell list (✓ + label) */ +.spell-level-labels { + display: grid; + grid-template-columns: 20px 1fr; + align-items: center; + gap: 8px; + padding: 2px 4px; + font-weight: bold; + font-size: 1.2em; + color: #444; + margin-bottom: 4px; + border-bottom: 2px solid rgb(223, 223, 223); +} + + +.spells-list .repcontrol { + margin-bottom:20px; + margin-top:10px; +} + + + + + + +.sheet-wealth-table { + display: table; + width: 100%; +} + +.sheet-wealth-table .wealth-row { + display: table-row; +} + +.sheet-wealth-table .wealth-cell { + display: table-cell; + vertical-align: middle; + padding: 5px; +} + +.sheet-wealth-table .coin-col { + width: 100px; + text-align: center; +} + +.sheet-wealth-table .wealth-heading { + text-align: left; + font-weight: bold; + font-size: 2em; + width: 100px; +} + +.sheet-wealth-table input[type="text"] { + width: 80px; + height: 40px; + border: 2px solid black; + text-align: center; + box-sizing: border-box; +} + +.sheet-wealth-table label { + display: block; + width: 100%; + margin: 0 auto; + text-align: center; + font-size: 1.5em; + font-weight: bold; +} + +.treasure-heading { + font-size: 2em; + margin-top: 10px; + border-bottom: 2px solid rgb(43, 43, 43) !important; +} + + +/* ======================================== */ +/* Treasure Section */ +/* ======================================== */ +.treasure-two-col { + display: flex; + gap: 40px; + margin-top: 10px; +} + +.treasure-col { + flex: 1; + text-align: left; +} + +.treasure-col-header { + display: flex; + gap: 10px; + font-weight: bold; + margin-bottom: 8px; +} + +.col-item-label, .col-value-label { + width: 50%; + text-align: left; + font-size: 1.3em; +} + +.repeating_treasureleft, +.repeating_treasureright { + margin-bottom: 10px; +} + +.treasure-entry-2col { + display: flex; + gap: 10px; + margin-bottom: 5px; +} + +.treasure-entry-2col input[type="text"] { + width: 50%; + box-sizing: border-box; + padding: 4px; + border: 1px solid #ccc; +} + +.charsheet .sheet-wealth .treasure-section .treasure-entry { + display: inline-block; + margin-bottom: 10px; + white-space: nowrap; + text-align: left; +} + +.charsheet .sheet-wealth .treasure-section .treasure-entry label.treasure-label, +.charsheet .sheet-wealth .treasure-section .treasure-entry label.treasure-value-label { + display: inline-block !important; + width: auto !important; + float: none !important; + margin: 0 !important; + padding: 0 6px 0 0 !important; + vertical-align: middle !important; + text-align: left !important; +} + +.charsheet .sheet-wealth .treasure-section .treasure-entry label.treasure-label { + margin-right: 6px; +} + +.charsheet .sheet-wealth .treasure-section .treasure-entry label.treasure-value-label { + margin-left: 20px; + margin-right: 6px; +} + +.charsheet .sheet-wealth .treasure-section .treasure-entry input[type="text"] { + border: 1px solid #ccc; + padding: 4px; + box-sizing: border-box; + width: 150px; +} + +/* ======================================== */ +/* Henchmen Tab */ +/* ======================================== */ + +.sheet-hireling-table { + width: 100%; + margin-bottom: 20px; + padding: 10px; + border: 1px solid #ccc; + box-sizing: border-box; +} + +/* Row 1: Name / Race / Class / Level / HP / Armor / AC / XP + Use the same grid template for labels and data so they line up */ +.hireling-row1-labels, +.hireling-row1-data { + display: grid; + grid-template-columns: + 255px /* Name */ + 105px /* Race */ + 105px /* Class */ + 40px /* Level */ + 40px /* HP */ + 130px /* Armor */ + 40px /* AC */ + 60px; /* XP */ + column-gap: 5px; + margin-bottom: 5px; + font-family: "Proxima Nova", sans-serif; + font-size: 1em; + align-items: center; +} + +/* Make only the header row bold */ +.hireling-row1-labels { + font-weight: bold; +} +.hireling-row1-data { + font-weight: normal; +} + +/* Row 2: Attack / Weapon / Hit Mod / Damage / Dmg Mod / Notes + Again, same grid template for labels and data */ +.hireling-row2-labels, +.hireling-row2-data { + display: grid; + grid-template-columns: + 29px /* Attack button */ + 150px /* Weapon */ + 60px /* Hit Mod */ + 60px /* Damage (die) */ + 68px /* Dmg Mod */ + auto; /* Notes */ + column-gap: 5px; + margin-bottom: 5px; + font-family: "Proxima Nova", sans-serif; + font-size: 1em; + align-items: center; +} + +/* Header row bold, data normal */ +.hireling-row2-labels { + font-weight: bold; +} +.hireling-row2-data { + font-weight: normal; +} + + + +.sheet-hireling-tab { + margin-top: 10px; +} + +.hireling-col-name { width: 255px;} + +.hireling-col-race { width: 105px; } + +.hireling-col-class { width: 105px;} + +.hireling-col-level { width: 40px; text-align: center !important; } + +.hireling-col-hp { width: 40px;text-align: center !important; } + +.hireling-col-armor { width: 130px;} + +.hireling-col-ac { width: 40px;text-align: center !important;} + +.hireling-col-xp { width: 60px;text-align: center !important;} + +.hireling-col-attack { min-width: 29px; text-align: center !important;padding-right:5px; } + +.hireling-col-weapon { width: 150px;} + +.hireling-col-hitmod { width: 60px;text-align: center !important;} + +.hireling-col-dmgdice{ min-width: 60px;} + +.hireling-col-dmgmod { width: 68px;text-align: center !important; } + +.hireling-col-notes {text-align: left !important; } + +select.hireling-col-dmgdice {max-width: 60px;} + +.hireling-row1-data input[type="text"], + .hireling-row1-data select, + .hireling-row2-data input[type="text"], + .hireling-row2-data select { + font-family: "Proxima Nova", sans-serif; + height: 29px; + line-height: 29px; + box-sizing: border-box; + border: 1px solid #aaa; + text-align: left; + padding: 0 4px; + font-size:1em; + } + +.hireling-row2-data .hireling-col-attack button { + width: 25px; + height: 25px; + border: 2px solid #000; + background: #671c1c; + cursor: pointer; + font-family: "Proxima Nova", sans-serif; + font-size: 0.7em; + color: #fff; + text-align: center; + padding: 0; + box-sizing: border-box; + } + + +/* ======================================== */ +/* NOTES SHEET */ +/* ======================================== */ +.sheet-notes { + margin-top: 10px; + } + +.notes-two-col { + display: flex; + gap: 20px; + } + +.notes-col { + flex: 1; + text-align: left; + } + +.notes-entry { + margin-bottom: 15px; + } + +.notes-entry input[type="text"], + .notes-entry textarea { + width: 100%; + box-sizing: border-box; + font-family: "Proxima Nova"; + border: 1px solid #ccc; + padding: 5px; + margin-bottom: 5px; + } + +.notes-entry textarea[type="text"], .notes-entry textarea { +height:50px; +} + +/* ==================================================== */ +/* ==== OVERRIDE ROLL20'S DEFAULT INPUT MARGINS ==== */ +/* ==================================================== */ +.charsheet input, +.charsheet select, +.charsheet textarea, +.monsheet input, +.monsheet select, +.monsheet textarea { + margin-bottom: 0 !important; + line-height: normal !important; /* prevents weird height shrinkage */ + height: auto !important; /* stops Roll20's 18px forced height */ +} + +/* ======================================== */ +/* MONSTER SHEET */ +/* ======================================== */ + +.monster-sheet { + font-family: "Proxima Nova", sans-serif; + margin: 10px; + /* more padding on the right so the attack column doesn’t butt the dialog edge */ + padding: 10px 36px 10px 10px; /* top, right, bottom, left */ + border: none; + background: #fff; + margin-top: 0; +} + +.monster-sheet .monster-header { + display: grid; + grid-template-columns: 1fr 3fr; + gap: 30px; +} + + +.monster-sheet-cols { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 40px; /* slightly closer together so the whole block shifts left a bit */ +} + +.monster-sheet .monster-info-grid { + display: grid; + grid-template-columns: 40px 100px 180px; + row-gap: 5px; + align-items: center; + align-self: start; +} + +.monster-sheet .stat-row { + display: contents; +} + +.monster-sheet .stat-button { + grid-column: 1; + text-align: center; +} + +.monster-sheet .stat-label { + grid-column: 2; + font-weight: bold; + font-size: 1.1em; + margin-left: 5px; +} + +.monster-sheet .stat-input { + grid-column: 3; +} + +.monster-sheet .stat-input input[type="text"] { + width: 100%; + border: none; + border-bottom: 2px solid rgb(97,97,97); + padding: 2px; + font-size: 1.1em; + background: transparent; + border-radius: 0; +} + +.monster-sheet .stat-input input[type="text"]:hover, +.monster-sheet .stat-input input[type="text"]:focus { + border-bottom-color: rgb(150,150,150); +} + +.monster-sheet .double-input { + display: flex; + gap: 5px; +} + +.monster-sheet .double-input input[type="text"] { + width: calc(50% - 2.5px); +} + +.monster-sheet .monster-image img { + width: 100%; + max-width: 150px; + border: 2px solid rgb(97,97,97); +} + +.monster-sheet button[type="roll"] { + background: transparent; + border: 2px solid black; + width: 20px; + height: 20px; + cursor: pointer; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + color: black; + font-weight: 500; + font-size: 1.7em !important; + border: 0; + text-shadow: none; + box-shadow: none; +} + +.monster-sheet button[type="roll"]:hover { + + color: rgb(255, 255, 255); + background:rgb(122, 42, 42) +} + +.monster-sheet .monster-saving-throws { + margin-top: 30px; + text-align: left; +} + +.monster-sheet .monster-saving-throws h3 { + font-size: 1.4em; + margin: 5px 0; +} + +.monster-sheet .saving-throws-grid { + display: grid; + grid-template-columns: repeat(5, auto); + gap: 5px; + justify-content: start; +} + +.monster-sheet .saving-throw { + display: flex; + flex-direction: column; + align-items: flex-start; + margin-left: 20px; +} + +.monster-sheet .saving-throw input[type="text"] { + width: 40px; + border: none; + border-bottom: 2px solid rgb(97, 97, 97); + padding: 5px; + font-size: 1.1em; + background: transparent; + border-radius: 0; + text-align: center; +} + +.saving-throw [type="roll"]{ + + margin-left: 10px !important; +} + +.monster-sheet .saving-throw input[type="text"]:hover, +.monster-sheet .saving-throw input[type="text"]:focus { + border-bottom-color: rgb(150,150,150); +} + +.monster-sheet .saving-label { + font-size: 1em; + margin-top: 2px; + text-align: center; + width: 100%; +} + +.monster-sheet .monster-description { + margin-top: 10px; + height: 100%; +} + +.monster-sheet .monster-description h3 { + font-size: 1.4em; + text-align: left; + margin: 5px 0; +} + +.monster-sheet .monster-description textarea { + height: 100%; + padding: 5px; + font-size: 1.1em; + background: transparent; + border-radius: 0; +} + +.monster-sheet .monster-description textarea:hover, +.monster-sheet .monster-description textarea:focus { + border-color: rgb(150,150,150); +} + +.mon-atk-row-1 { + display: grid; + grid-template-columns: 1fr 3fr; + gap: 10px; + align-items: center; + } + +.mon-atk-row-2 { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap: 10px; + align-items: center; + } + +.mon-atk-row-description { + display: grid; + grid-template-columns: 100%; + gap: 10px; + align-items: start; + } + + +.mon-atk-row-description textarea { + margin-top: 16px !important; +} + +.monster-attack input[type="text"] { + border: none; + border-bottom: 2px solid rgb(97,97,97); + font-size: 1em; + background: transparent; + border-radius: 0; + width: 100%; + box-sizing: border-box; + padding: 1px !important; + } + +.monster-attack label { + font-size: 1em; + font-weight: bold; + margin-right: 4px !important; + } + +.monster-attack .atk-entry { + margin-bottom: 10px; +} + +.monster-attack textarea { + width: 90%; + height:60px; + border: 1px solid rgb(97,97,97); + padding: 5px; + font-size: 1.1em; + background: transparent; + border-radius: 0; + box-sizing: border-box; + margin-bottom:25px; + } + +.mon-atk-row-1, +.mon-atk-row-2 { + display: flex; + align-items: center; + gap: 5px; +} + +/* Tighten monster attack label spacing */ +.monster-attack label { + margin: 0 2px 0 0 !important; /* removes default spacing */ + padding: 0 !important; +} + +/* Reduce input padding */ +.monster-attack input[type="text"] { + padding: 2px 3px !important; /* subtle but cleaner */ +} + +.mon-atk-row-1 label, +.mon-atk-row-2 label { + margin: 0; + display: inline-block; + width: auto; + font-size: 1.1em; +} + +.mon-atk-row-1 input[type="text"], +.mon-atk-row-2 input[type="text"] { + width: auto; + flex: 1; + margin: 0; + padding: 3px; + font-size: 1.1em; +} + +.monster-attack button[type="roll"] { + flex-shrink: 0; + margin: 0; +} + + + +.sheet-weapon-table { + width: 100%; + margin-bottom: 1em; +} + +.weapon-row { + display: grid; + grid-template-columns: + /* roll button */ 2em + /* name */ 5.5fr + /* type */ 2fr + /* hit mod */ 1fr + /* dmg */ 1.5fr + /* dmg mod */ 1fr; + align-items: center; + gap: 0.5em; + padding: 0.2em 0; +} + +.header-row { + font-family: "Proxima Nova"; + font-weight: bold; + border-bottom: 2px solid #000000; + font-size: 1.2em; + margin-bottom: 5px; +} + +.header-row .cell-weapon { grid-column: 1 / span 2; } + +.header-row .cell-type { text-align: left; } + +.header-row .cell-hitmod { text-align: center; } + +.header-row .cell-dmg { text-align: center; } + +.header-row .cell-dmgmod { text-align: center; } + +.weapon-row button { + width: 1.5em; + height: 1.5em; + padding: 0; + border: none; + background: transparent; + cursor: pointer; +} + +.weapon-row input[type="text"], +.weapon-row select { + width: 100%; + box-sizing: border-box; + padding: 2px 4px; + border: 1px solid #888; + border-radius: 2px; + font-size: 1.2em; + margin-bottom:0; + background: #fff; + font-family: "Proxima Nova"; + height:28px; +} + +.weapon-row input[name="attr_new_weapon"] { + border-top: none; + border-left: none; + border-right: none; + border-bottom: 1px solid #888; + border-radius: 0; + padding-left: 0; + text-align:left !important; + +} + +.weapon-row input[type="text"] { + + text-align:center; +} + +.sheet-weapon-table .repcontrol { + margin-top:10px; +} + + +.sheet-weapon-table hr { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-top: 1px solid #000000; +} + + +.repcontrol .btn { + color: #000000; + font-family: "Proxima Nova"; + border-radius: 2px; + box-shadow: none; + background-color: #f1f1f1; + background-image: none; +} + + + + +.sheet-atk-weapon { + font-family: "Proxima Nova"; +} \ No newline at end of file diff --git a/Dragonslayer/dragonslayer.png b/Dragonslayer/dragonslayer.png new file mode 100644 index 0000000000..e4d17b86f6 Binary files /dev/null and b/Dragonslayer/dragonslayer.png differ diff --git a/Dragonslayer/sheet.json b/Dragonslayer/sheet.json new file mode 100644 index 0000000000..9ea8b32e10 --- /dev/null +++ b/Dragonslayer/sheet.json @@ -0,0 +1,9 @@ +{ + "html": "dragonslayer.html", + "css": "dragonslayer.css", + "authors": "Bradley and Todd Antill", + "roll20userid": "759581", + "preview": "dragonslayer.jpg", + "instructions": "This character sheet is designed for use with the Dragonslayer Classic Fantasy Role-Playing Game by Greg Gillespie.

\n\nNotes
\n• This sheet includes one-click roll buttons for attacks, saving throws, thief skills, and class abilities. Rolls automatically calculate total to-hit, damage, and success or failure.

\n\n• Ability score modifiers are automatically calculated when ability scores are entered. Saving throws are calculated when class and level are entered.

\n\n• The sheet features a toggle that switches between the standard player-character sheet and a monster-style stat block.

\n\n• This is the official Dragonslayer Classic Fantasy RPG Roll20 sheet and will be compatible with future compendia.", + "legacy": true +} \ No newline at end of file