mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 03:40:32 +00:00
10918 lines
216 KiB
CSS
10918 lines
216 KiB
CSS
/*
|
||
Logical Fantasy Gaming (LFG)
|
||
Official Roll20 Character Sheet
|
||
|
||
Author: Daniel Brillat
|
||
System: Logical Fantasy Gaming (LFG)
|
||
Repository: https://github.com/LogicalFantasyGaming/lfg-roll20-character-sheet
|
||
*/
|
||
|
||
/* LFG Roll20 Sheet (Phase 1 - Manual Entry) */
|
||
/* v3: expanded Skills + Gear slots based on Hybrid v17 PDF form fields */
|
||
|
||
.lfg-sheet { font-family: Arial, sans-serif; position: relative;
|
||
}
|
||
|
||
|
||
/* Default fillable field tone (matches Core Stats fields) */
|
||
.lfg-sheet input[type="text"],
|
||
.lfg-sheet textarea{
|
||
background: #f2f2f2;
|
||
}
|
||
|
||
/* Placeholder styling: lighter than filled text */
|
||
.lfg-sheet input::placeholder,
|
||
.lfg-sheet textarea::placeholder{
|
||
color: rgba(0,0,0,0.45);
|
||
opacity: 1;
|
||
}
|
||
|
||
/* Hide tab state radios (still functional) */
|
||
.tabstate {
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
/* Tabs */
|
||
.tabs {
|
||
display: flex;
|
||
gap: 8px;
|
||
margin-bottom: 10px;
|
||
}
|
||
.tabbtn {
|
||
border: 1px solid #333;
|
||
padding: 6px 10px;
|
||
border-radius: 6px;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
}
|
||
|
||
/* Highlight active tab */
|
||
#tab-front:checked ~ .tabs label[for="tab-front"],
|
||
#tab-back:checked ~ .tabs label[for="tab-back"],
|
||
#tab-magic:checked ~ .tabs label[for="tab-magic"] {
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
}
|
||
|
||
/* Pages */
|
||
.page { display: none; }
|
||
#tab-front:checked ~ .page-front { display: block; }
|
||
#tab-back:checked ~ .page-back { display: block; }
|
||
#tab-magic:checked ~ .page-magic { display: block; }
|
||
|
||
.grid { display: grid; gap: 10px; }
|
||
.grid.two { grid-template-columns: 1fr 1fr; }
|
||
.grid.three { grid-template-columns: 1fr 1fr 1fr; }
|
||
|
||
/* Top row (Core Stats + Armor & Saves): stack by default, sit side-by-side when wide enough */
|
||
.grid.top-two{
|
||
display:flex;
|
||
flex-wrap:wrap;
|
||
gap: 20px;
|
||
justify-content:flex-start;
|
||
align-items:flex-start;
|
||
/* ensures we only wrap when there would be <10px space to the right */
|
||
padding-right:10px;
|
||
}
|
||
|
||
.grid.top-two > .card{
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
|
||
.card {
|
||
border: 1px solid #333;
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
}
|
||
.card-title { font-weight: bold; margin-bottom: 8px; }
|
||
|
||
.subcard {
|
||
border: 1px solid #777;
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
}
|
||
.subcard-title {
|
||
font-weight: bold;
|
||
margin-bottom: 6px;
|
||
font-size: 13px;
|
||
}
|
||
|
||
.row { margin-bottom: 8px; }
|
||
.row label { display: block; font-size: 12px; margin-bottom: 2px; }
|
||
.row.two { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
|
||
.row.three { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; }
|
||
|
||
input[type="text"], textarea {
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
border: 1px solid #666;
|
||
border-radius: 4px;
|
||
padding: 4px 6px;
|
||
}
|
||
|
||
textarea { min-height: 25px; resize: vertical; }
|
||
|
||
.stat small { display: block; font-size: 11px; margin-top: 4px; }
|
||
hr { border: none; border-top: 1px solid #999; margin: 10px 0; }
|
||
|
||
/* Skills */
|
||
.skill-header {
|
||
display: grid;
|
||
grid-template-columns: 0.7fr 2.2fr 0.9fr 0.8fr 0.8fr 0.7fr;
|
||
gap: 6px;
|
||
align-items: end;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
margin-bottom: 6px;
|
||
}
|
||
.skill-row {
|
||
display: grid;
|
||
grid-template-columns: 0.7fr 2.2fr 0.9fr 0.8fr 0.8fr 0.7fr;
|
||
gap: 6px;
|
||
align-items: center;
|
||
margin-bottom: 6px;
|
||
}
|
||
.skill-name { font-size: 12px; }
|
||
|
||
/* Weapons */
|
||
.weapon-block { padding: 6px 0; }
|
||
|
||
/* Inventory grids */
|
||
.inv-grid {
|
||
display: grid;
|
||
gap: 6px;
|
||
}
|
||
.inv-cols-1 { grid-template-columns: 1fr; }
|
||
.inv-cols-2 { grid-template-columns: 1fr 1fr; }
|
||
|
||
.inv-row {
|
||
display: grid;
|
||
grid-template-columns: 28px 1fr 80px;
|
||
gap: 6px;
|
||
align-items: center;
|
||
}
|
||
.inv-label {
|
||
text-align: center;
|
||
font-size: 12px;
|
||
font-weight: bold;
|
||
border: 1px solid #999;
|
||
border-radius: 4px;
|
||
padding: 2px 0;
|
||
}
|
||
|
||
.inv-sheaths {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 10px;
|
||
}
|
||
|
||
/* Equipped */
|
||
.equip-grid {
|
||
display: grid;
|
||
grid-template-columns: 1fr;
|
||
gap: 6px;
|
||
}
|
||
.equip-row {
|
||
display: grid;
|
||
grid-template-columns: 120px 1fr 80px;
|
||
gap: 6px;
|
||
align-items: center;
|
||
}
|
||
.equip-label {
|
||
font-size: 12px;
|
||
font-weight: bold;
|
||
}
|
||
|
||
|
||
|
||
/* Repeating custom skills */
|
||
fieldset.repeating_customskills {
|
||
border: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.skill-header-custom,
|
||
.skill-row-custom {
|
||
grid-template-columns: 0.7fr 2.2fr 0.9fr 0.8fr 0.8fr 0.7fr;
|
||
}
|
||
|
||
.skill-row-custom input[type="text"]{
|
||
width: 100%;
|
||
}
|
||
|
||
|
||
/* ===== Identity Strip (Front) ===== */
|
||
.identity-strip{
|
||
border: 1px solid #333;
|
||
border-radius: 0;
|
||
padding: 6px 8px;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.id-grid{
|
||
display: grid;
|
||
grid-template-columns: 1.5fr 1.1fr 0.7fr 0.7fr 0.7fr 0.7fr 0.8fr 140px;
|
||
gap: 6px 10px;
|
||
align-items: end;
|
||
}
|
||
|
||
/* labels */
|
||
.identity-strip label{
|
||
display: block;
|
||
font-size: 10px;
|
||
font-weight: bold;
|
||
color: #000;
|
||
text-transform: uppercase;
|
||
margin-bottom: 2px;
|
||
letter-spacing: 0.2px;
|
||
}
|
||
|
||
/* underline inputs */
|
||
.identity-strip input[type="text"]{
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
border: 0;
|
||
border-bottom: 1px solid #333;
|
||
border-radius: 0;
|
||
padding: 1px 2px;
|
||
height: 18px;
|
||
font-size: 11px;
|
||
background: transparent;
|
||
}
|
||
.identity-strip input[type="text"]:focus{
|
||
outline: none;
|
||
box-shadow: none;
|
||
}
|
||
|
||
/* XP compact box (4 digits) */
|
||
.id-xp{
|
||
justify-self: end;
|
||
width: 140px;
|
||
border: 2px solid #333;
|
||
padding: 4px 6px 6px 6px;
|
||
border-radius: 0;
|
||
}
|
||
.id-xp label{ text-align: center; font-size: 9px; margin-bottom: 3px; }
|
||
.id-xp .xp4{
|
||
border: 1px solid #333 !important;
|
||
border-radius: 0;
|
||
text-align: center;
|
||
font-size: 14px;
|
||
font-weight: bold;
|
||
height: 26px;
|
||
padding: 2px 4px;
|
||
}
|
||
|
||
/* Row layout matching paper sheet */
|
||
.id-name{ grid-column: 1 / 2; grid-row: 1; }
|
||
.id-class{ grid-column: 2 / 3; grid-row: 1; }
|
||
.id-level{ grid-column: 3 / 4; grid-row: 1; }
|
||
.id-xp{ grid-column: 4 / 5; grid-row: 1; align-self: start; }
|
||
|
||
/* second row across full width excluding XP */
|
||
.id-age{ grid-column: 1 / 2; grid-row: 2; }
|
||
.id-sex{ grid-column: 2 / 3; grid-row: 2; }
|
||
.id-height{ grid-column: 3 / 4; grid-row: 2; }
|
||
.id-weight{ grid-column: 1 / 2; grid-row: 3; }
|
||
.id-hair{ grid-column: 2 / 3; grid-row: 3; }
|
||
.id-eyes{ grid-column: 3 / 4; grid-row: 3; }
|
||
.id-race{ grid-column: 1 / 4; grid-row: 4; }
|
||
|
||
/* third row: morality + motivations */
|
||
.id-morality{ grid-column: 1 / 2; grid-row: 5; }
|
||
.id-motivation1{ grid-column: 2 / 3; grid-row: 5; }
|
||
.id-motivation2{ grid-column: 3 / 4; grid-row: 5; }
|
||
|
||
/* responsive */
|
||
@media (max-width: 900px){
|
||
.id-grid{ grid-template-columns: 1fr 1fr; }
|
||
.id-xp{ grid-column: 1 / 3; grid-row: auto; width: auto; }
|
||
.id-race, .id-motivation1, .id-motivation2{ grid-column: 1 / 3; }
|
||
}
|
||
|
||
|
||
/* Override placements to fit Age/Sex/Height/Weight/Hair/Eyes/Race on one line */
|
||
.id-name{ grid-column: 1 / 4; grid-row: 1; }
|
||
.id-class{ grid-column: 4 / 7; grid-row: 1; }
|
||
.id-level{ grid-column: 7 / 8; grid-row: 1; }
|
||
.id-xp{ grid-column: 8 / 9; grid-row: 1; align-self: start; }
|
||
|
||
/* Single line: Age, Sex, Height, Weight, Hair, Eyes, Race */
|
||
.id-age{ grid-column: 1 / 2; grid-row: 2; }
|
||
.id-sex{ grid-column: 2 / 3; grid-row: 2; }
|
||
.id-height{ grid-column: 3 / 4; grid-row: 2; }
|
||
.id-weight{ grid-column: 4 / 5; grid-row: 2; }
|
||
.id-hair{ grid-column: 5 / 6; grid-row: 2; }
|
||
.id-eyes{ grid-column: 6 / 7; grid-row: 2; }
|
||
.id-race{ grid-column: 7 / 8; grid-row: 2; }
|
||
|
||
/* Row 3: Morality + Motivations */
|
||
.id-morality{ grid-column: 1 / 3; grid-row: 3; }
|
||
.id-motivation1{ grid-column: 3 / 6; grid-row: 3; }
|
||
.id-motivation2{ grid-column: 6 / 8; grid-row: 3; }
|
||
|
||
|
||
/* ===== Collapsible Identity Strip ===== */
|
||
.id-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
/* Button */
|
||
.id-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
}
|
||
|
||
/* Show when checked */
|
||
.id-toggle:checked + .id-toggle-btn{
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
}
|
||
|
||
/* Collapse/expand: checkbox and label are directly before .identity-strip */
|
||
.id-toggle:not(:checked) + .id-toggle-btn + .identity-strip{
|
||
display: none;
|
||
}
|
||
|
||
|
||
/* ===== Core Stats Ability Block (paper style) ===== */
|
||
.ability-block{
|
||
margin-bottom: 8px;
|
||
}
|
||
.ability-header{
|
||
display: grid;
|
||
grid-template-columns: 70px 1fr 0.6fr;
|
||
gap: 8px;
|
||
align-items: end;
|
||
margin-bottom: 6px;
|
||
}
|
||
.ability-col-title{
|
||
font-family: Arial, sans-serif;
|
||
font-weight: bold;
|
||
font-size: 13px;
|
||
text-align: center;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
.ability-row{
|
||
display: grid;
|
||
grid-template-columns: 70px 1fr 0.6fr;
|
||
gap: 8px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
.ability-abbr{
|
||
font-weight: 900;
|
||
font-size: 28px;
|
||
letter-spacing: 1px;
|
||
line-height: 1;
|
||
}
|
||
.ability-box{
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
height: 44px !important;
|
||
font-size: 18px !important;
|
||
font-weight: bold;
|
||
text-align: center;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* ===== Ability Score Size Reduction (Sheet16) ===== */
|
||
.ability-abbr{
|
||
font-size: 21px; /* ~25% reduction from 28px */
|
||
}
|
||
|
||
.ability-col-title{
|
||
font-size: 10px;
|
||
}
|
||
|
||
.ability-box{
|
||
width: 64px;
|
||
height: 32px !important;
|
||
font-size: 14px !important;
|
||
font-weight: bold;
|
||
text-align: center;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* ===== Ability Block Fixes (Sheet17) ===== */
|
||
/* Make STR/DEX/etc smaller */
|
||
.ability-abbr{
|
||
font-size: 18px !important;
|
||
letter-spacing: 0.5px !important;
|
||
}
|
||
|
||
/* Column headers should be readable */
|
||
.ability-col-title{
|
||
font-size: 12px !important;
|
||
}
|
||
|
||
/* Force narrow numeric boxes (3 digits) */
|
||
.ability-header,
|
||
.ability-row{
|
||
grid-template-columns: 55px 72px 64px !important;
|
||
gap: 6px !important;
|
||
}
|
||
|
||
.ability-box{
|
||
width: 72px !important;
|
||
max-width: 72px !important;
|
||
min-width: 72px !important;
|
||
height: 30px !important;
|
||
font-size: 16px !important;
|
||
padding: 0 !important;
|
||
}
|
||
|
||
/* Ensure inputs don't stretch to 100% */
|
||
.ability-row input[type="text"]{
|
||
justify-self: center;
|
||
}
|
||
|
||
|
||
/* ===== Core Stats Card - Exact Layout (Sheet38) ===== */
|
||
.core-stats-card .card-title{
|
||
margin-bottom: 6px;
|
||
}
|
||
|
||
.hp-panel{
|
||
border: 2px solid #333;
|
||
border-radius: 0;
|
||
padding: 10px;
|
||
margin: 12px auto 14px auto;
|
||
display: inline-block;
|
||
width: fit-content;
|
||
max-width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.hp-panel-title{
|
||
text-align: center;
|
||
font-weight: 900;
|
||
font-size: 24px;
|
||
letter-spacing: 0.3px;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.hp-grid{
|
||
display: grid;
|
||
grid-template-columns: repeat(3, auto);
|
||
gap: 14px;
|
||
align-items: end;
|
||
justify-content: center;
|
||
margin-bottom: 6px;
|
||
}
|
||
|
||
.hp-label{
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
margin-bottom: 4px;
|
||
}
|
||
|
||
.hp-label-small{
|
||
font-size: 13px;
|
||
line-height: 1.05;
|
||
text-align: center;
|
||
padding: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.hp-box{
|
||
width: 64px;
|
||
box-sizing: border-box;
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
height: 34px !important;
|
||
font-size: 16px !important;
|
||
font-weight: 700;
|
||
text-align: center;
|
||
padding: 0 !important;
|
||
}
|
||
|
||
.hp-drgrid{
|
||
display: grid;
|
||
/* Match HP grid column geometry so the DR field can align with Injured Threshold */
|
||
grid-template-columns: repeat(3, 62px);
|
||
gap: 14px;
|
||
justify-content: center;
|
||
align-items: center;
|
||
margin-top: 2px;
|
||
}
|
||
|
||
.hp-drlabel{
|
||
grid-column: 1 / 3;
|
||
text-align: center;
|
||
font-size: 12px;
|
||
font-weight: 700;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.hp-drbox{
|
||
grid-column: 3;
|
||
justify-self: stretch;
|
||
width: 62px;
|
||
min-width: 62px;
|
||
max-width: 62px;
|
||
height: 24px !important;
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
font-size: 13px !important;
|
||
font-weight: 700;
|
||
text-align: center;
|
||
padding: 0 !important;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.corestat-row{
|
||
display: grid;
|
||
grid-template-columns: 1fr 86px;
|
||
align-items: center;
|
||
gap: 10px;
|
||
margin: 18px 0;
|
||
}
|
||
|
||
.corestat-label{
|
||
font-size: 20px;
|
||
font-weight: 900;
|
||
letter-spacing: 0.2px;
|
||
}
|
||
|
||
.corestat-label-initiative{
|
||
color: #1e4db7;
|
||
}
|
||
|
||
.corestat-box{
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
height: 34px !important;
|
||
font-size: 16px !important;
|
||
font-weight: 700;
|
||
text-align: center;
|
||
padding: 0 !important;
|
||
width: 86px !important;
|
||
}
|
||
|
||
|
||
|
||
/* ===== Core Stats Fixed Box Width + Non-Drifting Spacing (Sheet39) ===== */
|
||
/* HP boxes: fixed width + fixed gaps (do not expand with window) */
|
||
.core-stats-card .hp-grid{
|
||
grid-template-columns: repeat(3, 62px) !important;
|
||
justify-content: center;
|
||
gap: 14px !important;
|
||
}
|
||
|
||
.core-stats-card .hp-cell{
|
||
width: 62px;
|
||
}
|
||
|
||
.core-stats-card .hp-box{
|
||
width: 50px !important;
|
||
min-width: 50px !important;
|
||
max-width: 50px !important;
|
||
}
|
||
|
||
/* Hit Rating / Initiative / Move Speed: keep input close to label (no drifting) */
|
||
.core-stats-card .corestat-row{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: flex-start;
|
||
gap: 10px;
|
||
margin: 18px 0;
|
||
}
|
||
|
||
.core-stats-card .corestat-label{
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.core-stats-card .corestat-box{
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
|
||
/* ===== Armor & Saves card (Sheet43) ===== */
|
||
.armor-saves-card { padding: 10px 12px 12px; }
|
||
|
||
.armor-saves-card .armor-box,
|
||
.armor-saves-card .save-box {
|
||
border: 2px solid #333;
|
||
border-radius: 0;
|
||
height: 34px;
|
||
font-weight: 700;
|
||
text-align: center;
|
||
background: #f2f2f2;
|
||
font-size: 14px;
|
||
}
|
||
|
||
/* All Saving Throw boxes are the same size */
|
||
.armor-saves-card input.save-box{
|
||
/* Reduce max width by 50% (84px -> 42px) */
|
||
width: 42px;
|
||
max-width: 42px;
|
||
/* Reduced by 15% from prior (43px -> ~37px) */
|
||
height: 37px;
|
||
}
|
||
|
||
/* Ensure all Saving Throw inputs (including Ability Mod) share the same size */
|
||
.armor-saves-card input.save-ability,
|
||
.armor-saves-card input.save-total{
|
||
width: 42px;
|
||
max-width: 42px;
|
||
height: 37px;
|
||
}
|
||
|
||
/* Ability Mod boxes (CON/DEX/WIS) are fillable with visible placeholders */
|
||
.armor-saves-card input.save-ability{
|
||
font-weight: 900;
|
||
}
|
||
.armor-saves-card input.save-ability::placeholder{
|
||
color: #888;
|
||
opacity: 1;
|
||
font-weight: 900;
|
||
}
|
||
|
||
|
||
.armor-saves-card input.armor-box,
|
||
.armor-saves-card input.save-box{
|
||
padding: 0 !important;
|
||
box-sizing: border-box;
|
||
}
|
||
.armor-saves-card .armor-top{
|
||
width: max-content;
|
||
|
||
display: grid;
|
||
/* Reduce Armor Class field widths by 25% (84px -> 63px) */
|
||
grid-template-columns: auto 63px auto;
|
||
align-items: start;
|
||
column-gap: 12px;
|
||
margin-top: 4px;
|
||
}
|
||
|
||
.armor-saves-card .armor-class-label{
|
||
font-size: 26px;
|
||
font-weight: 900;
|
||
color: #7a1f1f;
|
||
line-height: 1.05;
|
||
padding-top: 6px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.armor-saves-card .armor-box-main{
|
||
width: 63px;
|
||
/* Increase height by 20% (44px -> ~53px) */
|
||
height: 64px;
|
||
font-size: 22px;
|
||
margin-top: 2px;
|
||
}
|
||
|
||
.armor-saves-card .temp-ac-block{
|
||
display: inline-flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 5px;
|
||
justify-self: center;
|
||
}
|
||
.armor-saves-card .temp-ac-label{
|
||
font-size: 12px;
|
||
line-height: 1.05;
|
||
margin-top: 0px;
|
||
}
|
||
|
||
.armor-saves-card .armor-box-temp{
|
||
width: 32px;
|
||
/* Increase height by 20% (34px -> ~41px) */
|
||
height: 49px;
|
||
margin-top: 2px;
|
||
font-size: 16px;
|
||
}
|
||
|
||
.armor-saves-card .armor-lines{
|
||
margin-top: 10px;
|
||
display: grid;
|
||
grid-template-columns: auto 63px auto;
|
||
column-gap: 12px;
|
||
row-gap: 10px;
|
||
justify-content: start;
|
||
}
|
||
|
||
/* Small reference text under Touch AC (matches Temp AC label styling) */
|
||
.armor-saves-card .ac-formula{
|
||
font-size: 12px;
|
||
line-height: 1.05;
|
||
margin-top: 8px;
|
||
margin-left: 2px;
|
||
color: #333;
|
||
text-align: left;
|
||
}
|
||
|
||
.armor-saves-card .armor-line{
|
||
display: contents;
|
||
}
|
||
|
||
.armor-saves-card .armor-line-label{
|
||
grid-column: 1;
|
||
font-size: 18px;
|
||
font-weight: 900;
|
||
color: #333;
|
||
text-align: left;
|
||
letter-spacing: 0.5px;
|
||
}
|
||
|
||
.armor-saves-card .armor-box-small{
|
||
width: 63px;
|
||
height: 41px;
|
||
font-size: 16px;
|
||
grid-column: 2;
|
||
justify-self: center;
|
||
}
|
||
|
||
.armor-saves-card .conditions-panel{
|
||
border: 1px solid #333;
|
||
padding: 6px 8px 2px;
|
||
margin-top: 12px;
|
||
width: 300px;
|
||
max-width: 300px;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
}
|
||
|
||
.armor-saves-card .conditions-label{
|
||
font-size: 16px;
|
||
color: #333;
|
||
margin-bottom: 6px;
|
||
}
|
||
|
||
.armor-saves-card .conditions-text{
|
||
width: 100%;
|
||
height: 48px;
|
||
border: 1px solid #333;
|
||
resize: none;
|
||
background: #f2f2f2;
|
||
}
|
||
|
||
.armor-saves-card .saving-title{
|
||
margin-top: 14px;
|
||
text-align: center;
|
||
font-size: 22px;
|
||
font-weight: 900;
|
||
color: #333;
|
||
}
|
||
|
||
.armor-saves-card .saving-header{
|
||
margin-top: 4px;
|
||
display: grid;
|
||
grid-template-columns: 81px 37px 29px 37px 4px 37px 4px 37px;
|
||
align-items: end;
|
||
column-gap: 6px;
|
||
justify-content: start;
|
||
}
|
||
|
||
.armor-saves-card .saving-header .sh{
|
||
font-size: 12px;
|
||
text-align: center;
|
||
line-height: 1.05;
|
||
color: #333;
|
||
justify-self: center;
|
||
}
|
||
|
||
.armor-saves-card .save-row{
|
||
margin-top: 6px;
|
||
display: grid;
|
||
grid-template-columns: 96px 37px 29px 37px 4px 37px 4px 37px;
|
||
align-items: center;
|
||
column-gap: 6px;
|
||
}
|
||
|
||
.armor-saves-card .save-name{
|
||
font-size: 20px;
|
||
font-weight: 900;
|
||
letter-spacing: 1px;
|
||
color: #333;
|
||
text-align: left;
|
||
}
|
||
|
||
.armor-saves-card .save-eq,
|
||
.armor-saves-card .save-plus{
|
||
text-align: center;
|
||
font-size: 22px;
|
||
font-weight: 900;
|
||
color: #333;
|
||
}
|
||
|
||
/* Ability mod boxes are now fillable inputs with placeholders */
|
||
.armor-saves-card input.save-ability::placeholder{
|
||
color: #888;
|
||
opacity: 1;
|
||
font-weight: 900;
|
||
}
|
||
|
||
.armor-saves-card input.save-ability{
|
||
font-weight: 900;
|
||
}
|
||
|
||
|
||
/* Total Save boxes: larger font to match Initiative */
|
||
.armor-saves-card .save-total{
|
||
font-size: 16px;
|
||
}
|
||
|
||
/* ===== Sheet52 adjustments ===== */
|
||
|
||
/* Conditions / Effects: left-align and lock position with its header text */
|
||
.armor-saves-card .conditions-panel{
|
||
margin-left: 0 !important;
|
||
margin-right: 0 !important;
|
||
/* keep fixed size; do not expand with window */
|
||
width: 300px !important;
|
||
max-width: 300px !important;
|
||
}
|
||
.armor-saves-card .conditions-label{
|
||
text-align: left !important;
|
||
}
|
||
|
||
/* Core Stats card max width: no more than HP panel + 40px (HP panel outer ~238px) */
|
||
.core-stats-card{
|
||
width: fit-content;
|
||
max-width: 278px;
|
||
}
|
||
|
||
/* Armor & Saves card max width: no more than Saving Throws grid + 40px (grid ~344px) */
|
||
.armor-saves-card{
|
||
width: fit-content;
|
||
max-width: 384px;
|
||
}
|
||
|
||
/* ===== Sheet61: Weapons table-style layout (Front) ===== */
|
||
.weapon-table{
|
||
border: 1px solid #333;
|
||
border-radius: 0;
|
||
display: grid;
|
||
grid-template-columns: 1.35fr 1fr 1fr 1.2fr;
|
||
grid-auto-rows: auto;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* grid placement */
|
||
.weapon-table > *{
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.wt-left{
|
||
border-right: 1px solid #333;
|
||
padding: 8px 10px;
|
||
}
|
||
|
||
.wt-row1{ border-bottom: 1px solid #333; }
|
||
.wt-row2{ border-bottom: 1px solid #333; }
|
||
|
||
.wt-head{
|
||
border-right: 1px solid #333;
|
||
border-bottom: 1px solid #333;
|
||
text-align: center;
|
||
font-family: Arial, sans-serif;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
padding: 10px 6px 12px;
|
||
line-height: 1.05;
|
||
}
|
||
.wt-head:last-child{ border-right: 0; }
|
||
|
||
.wt-cell{
|
||
border-right: 1px solid #333;
|
||
border-bottom: 1px solid #333;
|
||
padding: 10px 12px;
|
||
}
|
||
.wt-cell:last-child{ border-right: 0; }
|
||
|
||
/* left column typography */
|
||
.wt-weaponline{
|
||
display: grid;
|
||
grid-template-columns: 174px 1fr;
|
||
gap: 8px;
|
||
align-items: center;
|
||
margin-bottom: 6px;
|
||
}
|
||
.wt-weaponlabel{
|
||
font-size: 22px;
|
||
font-weight: 900;
|
||
letter-spacing: 0.5px;
|
||
}
|
||
.wt-weaponname{
|
||
border: 0 !important;
|
||
border-bottom: 1px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
background: transparent !important;
|
||
height: 26px !important;
|
||
padding: 2px 4px !important;
|
||
font-size: 16px !important;
|
||
}
|
||
|
||
.wt-handline{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px; /* exactly 10px between label text and R/L box */
|
||
margin-bottom: 8px;
|
||
}
|
||
.wt-handlabel{
|
||
font-size: 14px;
|
||
font-weight: 400;
|
||
}
|
||
.wt-hand{
|
||
width: 72px !important;
|
||
height: 26px !important;
|
||
font-size: 14px !important;
|
||
text-align: center;
|
||
flex: 0 0 72px;
|
||
}
|
||
|
||
.wt-bigaction{
|
||
display: block;
|
||
}
|
||
.wt-biglabel{
|
||
font-size: 18px;
|
||
font-weight: 900;
|
||
}
|
||
.wt-bigbox{
|
||
height: 28px !important;
|
||
font-size: 14px !important;
|
||
}
|
||
|
||
/* Attack line */
|
||
.wt-attackline{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 8px;
|
||
align-items: center;
|
||
}
|
||
.wt-attacklabel{
|
||
font-size: 22px;
|
||
font-weight: 900;
|
||
}
|
||
.wt-attackname{
|
||
border: 0 !important;
|
||
border-bottom: 1px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
background: transparent !important;
|
||
height: 28px !important;
|
||
padding: 2px 4px !important;
|
||
font-size: 16px !important;
|
||
}
|
||
|
||
/* right column inputs */
|
||
.wt-box{
|
||
width: 100% !important;
|
||
height: 42px !important;
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
font-size: 18px !important;
|
||
font-weight: 700 !important;
|
||
text-align: center !important;
|
||
padding: 0 !important;
|
||
background: #f2f2f2 !important;
|
||
}
|
||
|
||
/* Other Info row spans full width */
|
||
.wt-otherinfo{
|
||
grid-column: 1 / 5;
|
||
padding: 10px 12px 12px;
|
||
}
|
||
.wt-otherlabel{
|
||
font-family: Arial, sans-serif;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
margin-bottom: 6px;
|
||
}
|
||
/* Keep the weapon hr tight */
|
||
.repeating_weapons hr{
|
||
margin: 10px 0;
|
||
}
|
||
|
||
/* Repeating Feats/Abilities: keep consistent spacing */
|
||
fieldset.repeating_featsabilities{
|
||
border: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
/* ===== Sheet62: Weapons card full-width (Front) ===== */
|
||
.weapons-card-full{
|
||
grid-column: 1 / -1; /* span both columns in .grid.two */
|
||
width: 682px; /* Core Stats (278) + gap (20) + Armor&Saves (384) */
|
||
max-width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* make the grid container not constrain the spanning card */
|
||
.page-front .grid.two{
|
||
grid-auto-flow: row;
|
||
}
|
||
|
||
/* WEAPON label textbox */
|
||
.wt-weaponlabelbox{
|
||
width: 174px !important; /* +5% from 165px */
|
||
height: 28px !important;
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
background: #f2f2f2 !important;
|
||
font-size: 15px !important;
|
||
font-weight: 700 !important;
|
||
text-align: left !important;
|
||
padding: 2px 6px !important;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* Update weaponline layout since label is now an input */
|
||
.wt-weaponline{
|
||
display: grid;
|
||
grid-template-columns: 150px 1fr;
|
||
gap: 8px;
|
||
align-items: center;
|
||
margin-bottom: 6px;
|
||
}
|
||
|
||
/* Other Attack single textbox */
|
||
.wt-otherattack{
|
||
width: 90% !important;
|
||
height: 29px !important;
|
||
border: 0.7px solid #888 !important; /* ~0.5pt */
|
||
border-radius: 0 !important;
|
||
background: #f2f2f2 !important;
|
||
font-size: 14px !important;
|
||
font-weight: 700 !important;
|
||
padding: 2px 8px !important;
|
||
box-sizing: border-box !important;
|
||
}
|
||
|
||
/* Sheet63: Big Action Attack label matches Attack Bonus style */
|
||
.wt-biglabel{
|
||
font-family: Arial, sans-serif;
|
||
font-size: 15px;
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Sheet71: Weapon Other Info textarea sizing (matches desired 1-line expandable behavior) */
|
||
.weapon-notes-text{
|
||
width: 100%;
|
||
height: 25px;
|
||
min-height: 25px;
|
||
border: 1px solid #333;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
background: #f2f2f2;
|
||
}
|
||
|
||
/* Sheet72: Override Roll20 largedialog textarea height for weapon notes (initially compact but resizable) */
|
||
.charsheet textarea.weapon-notes-text{
|
||
height: 25px;
|
||
min-height: 25px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
}
|
||
|
||
/* Sheet73: header inputs under Attack Bonus / Critical / Damage */
|
||
.wt-head{
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: flex-start;
|
||
align-items: center;
|
||
}
|
||
|
||
.wt-headlabel{
|
||
width: 100%;
|
||
text-align: center;
|
||
}
|
||
|
||
.wt-box-top{
|
||
margin-top: 8px !important;
|
||
height: 42px !important; /* exact match to existing wt-box */
|
||
}
|
||
|
||
|
||
/* Sheet78: Secondary (second-row) weapon boxes */
|
||
.wt-row2 .wt-box{
|
||
font-size: 12px !important; /* already reduced */
|
||
height: 24px !important; /* -10% from 27px */
|
||
border: 0.7px solid #999 !important; /* ~0.5pt, lighter */
|
||
background: #f6f6f6 !important; /* subtle secondary feel */
|
||
}
|
||
|
||
/* Sheet76: Wider Initiative box */
|
||
input[name="attr_Initiative"].corestat-box{
|
||
width: 96px !important;
|
||
}
|
||
|
||
/* Sheet77: Expandable Feats & Class Abilities rows (initially compact) */
|
||
.charsheet textarea.feats-notes-text{
|
||
width: 100%;
|
||
height: 25px;
|
||
min-height: 25px;
|
||
border: 1px solid #333;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
padding: 2px 4px;
|
||
}
|
||
|
||
/* Sheet78: Feats card row spacing consistency */
|
||
.feats-card .row{
|
||
margin-bottom: 6px;
|
||
}
|
||
.feats-card .row:last-child{
|
||
margin-bottom: 0;
|
||
}
|
||
.charsheet textarea.feats-notes-text{
|
||
margin: 0;
|
||
display: block;
|
||
}
|
||
|
||
/* Sheet81: Definitive styling for Atk Bonus 2 / Critical 2 / Damage 2 */
|
||
.charsheet input.wt-box.wt-box-secondary{
|
||
height: 36px !important; /* 15% shorter than 42px */
|
||
font-size: 12px !important; /* -2 points from 14px baseline */
|
||
border-width: 0.7px !important; /* ~0.5pt */
|
||
border-style: solid !important;
|
||
border-color: #bbb !important; /* visibly lighter */
|
||
background: #f7f7f7 !important; /* subtle secondary */
|
||
}
|
||
|
||
/* Sheet82: Confidence Tokens line under CHA in Core Stats */
|
||
.ability-tokenline{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
margin-top: 6px;
|
||
}
|
||
|
||
/* Sheet83: Confidence Tokens box narrower (-30%) */
|
||
.charsheet input.hp-drbox.ct-box{
|
||
width: 44px !important;
|
||
min-width: 44px !important;
|
||
max-width: 44px !important;
|
||
}
|
||
|
||
/* Sheet83: Prevent Identity & XP grid from stretching too wide on large windows */
|
||
.id-grid{
|
||
max-width: 760px;
|
||
}
|
||
|
||
/* Sheet84: Morality Points compact field (3 digits) */
|
||
.id-moralitypoints input.mp3{
|
||
width: 56px;
|
||
max-width: 56px;
|
||
min-width: 56px;
|
||
}
|
||
|
||
/* Sheet85: Vision & Senses / Languages row (even split) */
|
||
.id-row-vision{
|
||
grid-column: 1 / 8; /* stop before the 140px XP column (col 8) */
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 12px;
|
||
margin-top: 6px;
|
||
}
|
||
|
||
/* Sheet85: Morality Points compact field (3 digits) */
|
||
.id-moralitypoints input.mp3{
|
||
width: 56px;
|
||
max-width: 56px;
|
||
min-width: 56px;
|
||
}
|
||
|
||
/* Sheet87: Prevent Vision & Senses label wrapping */
|
||
.id-vision label{
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* Sheet88: Identity toggle chevron + clickable affordance */
|
||
.id-toggle-btn{
|
||
position: relative;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
padding-right: 22px; /* room for arrow */
|
||
}
|
||
.id-toggle-btn::after{
|
||
content: "◀"; /* collapsed */
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
.id-toggle:checked + .id-toggle-btn::after{
|
||
content: "▼"; /* expanded */
|
||
color: #000;
|
||
}
|
||
.id-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
/* Sheet88: Tabs look like real tabs */
|
||
.tabs{
|
||
display: flex;
|
||
gap: 6px;
|
||
margin-bottom: 0;
|
||
}
|
||
.tabbtn{
|
||
cursor: pointer;
|
||
font-weight: 700;
|
||
padding: 6px 12px;
|
||
border: 1px solid #777;
|
||
border-bottom: 1px solid #777;
|
||
background: #e9e9e9;
|
||
border-top-left-radius: 8px;
|
||
border-top-right-radius: 8px;
|
||
box-shadow: 0 1px 0 rgba(0,0,0,0.15);
|
||
user-select: none;
|
||
}
|
||
.tabbtn:hover{
|
||
background: #f2f2f2;
|
||
}
|
||
|
||
/* Active tab */
|
||
.tabstate:checked + input.tabstate + .tabs label[for="tab-front"]{
|
||
/* placeholder - overridden below */
|
||
}
|
||
#tab-front:checked ~ .tabs label[for="tab-front"],
|
||
#tab-back:checked ~ .tabs label[for="tab-back"]{
|
||
background: #eaeaea;
|
||
border-color: #333;
|
||
border-bottom: none; /* connected to content */
|
||
position: relative;
|
||
top: 1px; /* slight lift */
|
||
}
|
||
|
||
/* Sheet89: Right column stack under Armor & Saves */
|
||
.right-col{
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 20px;
|
||
width: fit-content;
|
||
max-width: 384px;
|
||
}
|
||
|
||
/* Sheet89: Armor & Defenses card sizing */
|
||
.armor-defenses-card{
|
||
width: fit-content;
|
||
max-width: 308px;
|
||
}
|
||
|
||
|
||
/* ===== Sheet94: Armor & Defenses layout (paper-style) ===== */
|
||
.armor-defenses-card{
|
||
width: fit-content;
|
||
max-width: 308px;
|
||
padding: 10px 12px 12px;
|
||
}
|
||
|
||
.armor-defenses-card .ad-body{
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 12px;
|
||
}
|
||
|
||
/* shared */
|
||
.armor-defenses-card .ad-label{
|
||
font-size: 12px;
|
||
font-weight: 700;
|
||
}
|
||
.armor-defenses-card .ad-label.red{
|
||
color: #7a1f1f;
|
||
font-size: 14px;
|
||
font-weight: 900;
|
||
}
|
||
.armor-defenses-card .ad-input{
|
||
background: transparent !important;
|
||
border: 0 !important;
|
||
border-bottom: 1px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
padding: 2px 4px !important;
|
||
height: 22px !important;
|
||
font-size: 12px !important;
|
||
box-sizing: border-box !important;
|
||
}
|
||
.armor-defenses-card .ad-input:focus{
|
||
outline: none;
|
||
box-shadow: none;
|
||
}
|
||
|
||
/* block wrapper */
|
||
.armor-defenses-card .ad-block{
|
||
border: 1px solid #333;
|
||
border-radius: 0;
|
||
padding: 0;
|
||
overflow: hidden;
|
||
}
|
||
.armor-defenses-card .ad-block-title{
|
||
font-weight: 900;
|
||
font-size: 16px;
|
||
letter-spacing: 0.4px;
|
||
padding: 8px 10px;
|
||
border-bottom: 1px solid #333;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
/* armor block rows */
|
||
.armor-defenses-card .ad-armor{
|
||
padding-bottom: 8px;
|
||
}
|
||
.armor-defenses-card .ad-row{
|
||
padding: 6px 10px;
|
||
border-bottom: 1px solid #333;
|
||
}
|
||
.armor-defenses-card .ad-row:last-child{
|
||
border-bottom: 0;
|
||
}
|
||
.armor-defenses-card .ad-row-two{
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 10px;
|
||
}
|
||
.armor-defenses-card .ad-row-three{
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr 1fr;
|
||
gap: 10px;
|
||
}
|
||
.armor-defenses-card .ad-field{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
.armor-defenses-card .ad-field.ar-field{
|
||
gap: 4px;
|
||
}
|
||
.armor-defenses-card .ad-line{
|
||
width: 100%;
|
||
}
|
||
.armor-defenses-card input.ad-box{
|
||
width: 42px !important;
|
||
min-width: 42px !important;
|
||
max-width: 42px !important;
|
||
height: 26px !important;
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
background: #f2f2f2 !important;
|
||
text-align: center !important;
|
||
font-weight: 700 !important;
|
||
padding: 0 !important;
|
||
}
|
||
/* AR box: +20% size, +2pt font */
|
||
.armor-defenses-card input.ad-box.ad-box-ar{
|
||
width: 50px !important;
|
||
min-width: 50px !important;
|
||
max-width: 50px !important;
|
||
height: 31px !important;
|
||
font-size: 14px !important;
|
||
}
|
||
.armor-defenses-card input.ad-box.ad-box-secondary{
|
||
border-width: 0.7px !important;
|
||
border-style: solid !important;
|
||
border-color: #bbb !important;
|
||
background: #f7f7f7 !important;
|
||
font-size: 12px !important;
|
||
}
|
||
.armor-defenses-card .ad-divider{
|
||
height: 0;
|
||
border-top: 0;
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
.armor-defenses-card .ad-attackpen{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
.armor-defenses-card .ad-details{
|
||
display: grid;
|
||
grid-template-columns: 1fr auto;
|
||
gap: 8px;
|
||
align-items: center;
|
||
}
|
||
.armor-defenses-card .ad-check{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
font-size: 11px;
|
||
font-style: italic;
|
||
}
|
||
.armor-defenses-card .ad-check input[type="checkbox"]{
|
||
width: 16px;
|
||
height: 16px;
|
||
}
|
||
|
||
/* Other Defenses table */
|
||
.armor-defenses-card .ad-table{
|
||
display: grid;
|
||
grid-template-columns: 1fr 82px;
|
||
border: 1px solid #333;
|
||
border-radius: 0;
|
||
}
|
||
.armor-defenses-card .ad-th{
|
||
padding: 8px 10px;
|
||
border-bottom: 1px solid #333;
|
||
font-weight: 900;
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.3px;
|
||
}
|
||
.armor-defenses-card .ad-th-left{
|
||
border-right: 1px solid #333;
|
||
}
|
||
.armor-defenses-card .ad-th-right{
|
||
text-align: center;
|
||
}
|
||
.armor-defenses-card .ad-td{
|
||
padding: 3px 10px;
|
||
border-bottom: 1px solid #333;
|
||
}
|
||
.armor-defenses-card .ad-td-left{
|
||
border-right: 1px solid #333;
|
||
font-weight: 700;
|
||
}
|
||
.armor-defenses-card .ad-td-right{
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.armor-defenses-card input.ad-tablebox{
|
||
width: 50px !important;
|
||
min-width: 50px !important;
|
||
max-width: 50px !important;
|
||
height: 26px !important;
|
||
border: 2px solid #333 !important;
|
||
border-radius: 0 !important;
|
||
background: #f2f2f2 !important;
|
||
text-align: center !important;
|
||
font-weight: 700 !important;
|
||
padding: 0 !important;
|
||
}
|
||
|
||
/* Parry + Resistances spans full width */
|
||
.armor-defenses-card .ad-parry,
|
||
.armor-defenses-card .ad-resist{
|
||
grid-column: 1 / -1;
|
||
padding: 8px 10px;
|
||
border-bottom: 1px solid #333;
|
||
}
|
||
.armor-defenses-card .ad-parry{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
.armor-defenses-card .ad-parry-label{
|
||
font-weight: 900;
|
||
}
|
||
.armor-defenses-card .ad-parry-fixed{
|
||
font-weight: 700;
|
||
}
|
||
.armor-defenses-card .ad-parry-line{
|
||
width: 100%;
|
||
}
|
||
|
||
.armor-defenses-card .ad-resist{
|
||
border-bottom: 0;
|
||
}
|
||
.armor-defenses-card .ad-resist-label{
|
||
font-weight: 900;
|
||
margin-bottom: 6px;
|
||
}
|
||
.armor-defenses-card .ad-textarea{
|
||
width: 100%;
|
||
min-height: 28px !important;
|
||
border: 1px solid #333;
|
||
background: #f2f2f2;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
padding: 4px 6px;
|
||
font-size: 12px;
|
||
}
|
||
|
||
/* ===== Sheet95 tweaks ===== */
|
||
.armor-defenses-card .ad-block-title{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
}
|
||
|
||
.armor-defenses-card .ad-title-input{
|
||
flex: 1 1 auto;
|
||
min-width: 120px;
|
||
height: 22px !important;
|
||
font-size: 14px !important;
|
||
border-bottom: 1px solid #333 !important;
|
||
}
|
||
|
||
.armor-defenses-card .ad-armor-type{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
|
||
/* ===== Sheet96: Resistances textarea smaller by default ===== */
|
||
.armor-defenses-card .ad-textarea{
|
||
height: 28px !important;
|
||
min-height: 28px !important;
|
||
line-height: 14px !important;
|
||
resize: vertical;
|
||
}
|
||
|
||
/* ===== Sheet96: Other Defenses left column inputs ===== */
|
||
.armor-defenses-card input.ad-td-input{
|
||
width: 100% !important;
|
||
height: 22px !important;
|
||
border-bottom: 0 !important;
|
||
border: 0 !important;
|
||
padding: 0 2px !important;
|
||
background: transparent !important;
|
||
font-weight: 700 !important;
|
||
}
|
||
|
||
/* ===== Sheet97: Identity & XP tab width ===== */
|
||
.id-toggle-btn{
|
||
display: block !important;
|
||
width: 100% !important;
|
||
max-width: 384px !important;
|
||
box-sizing: border-box !important;
|
||
}
|
||
|
||
/* ===== Sheet97: Armor & Defenses card narrower ===== */
|
||
.armor-defenses-card{
|
||
max-width: 308px !important;
|
||
}
|
||
|
||
/* ===== Sheet97: Smaller MP / Max DEX / Attack Penalty boxes ===== */
|
||
.armor-defenses-card input.ad-box{
|
||
width: 42px !important;
|
||
min-width: 42px !important;
|
||
max-width: 42px !important;
|
||
}
|
||
|
||
/* ===== Sheet101: Parry & DR sizing + spacing ===== */
|
||
.armor-defenses-card .ad-parry{
|
||
display: grid;
|
||
grid-template-columns: auto auto;
|
||
justify-content: start;
|
||
align-items: center;
|
||
gap: 4px;
|
||
}
|
||
.armor-defenses-card .ad-parry .corestat-box{
|
||
width: 49px !important;
|
||
height: 27px !important;
|
||
}
|
||
.armor-defenses-card .ad-dr-row{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
.armor-defenses-card .ad-dr-row .ad-label{
|
||
white-space: nowrap;
|
||
}
|
||
.armor-defenses-card .ad-dr-row .corestat-box{
|
||
width: 69px !important;
|
||
height: 27px !important;
|
||
}
|
||
|
||
/* Sheet110: ARvC label forced to black */
|
||
.armor-defenses-card .arvc-black { color: #000; }
|
||
|
||
/* Sheet112: Lighter placeholder text across the entire sheet */
|
||
.lfg-sheet input::placeholder,
|
||
.lfg-sheet textarea::placeholder{
|
||
color: #b8b8b8 !important;
|
||
opacity: 1;
|
||
}
|
||
.lfg-sheet input::-webkit-input-placeholder,
|
||
.lfg-sheet textarea::-webkit-input-placeholder{
|
||
color: #b8b8b8 !important;
|
||
}
|
||
.lfg-sheet input:-ms-input-placeholder,
|
||
.lfg-sheet textarea:-ms-input-placeholder{
|
||
color: #b8b8b8 !important;
|
||
}
|
||
.lfg-sheet input::-ms-input-placeholder,
|
||
.lfg-sheet textarea::-ms-input-placeholder{
|
||
color: #b8b8b8 !important;
|
||
}
|
||
|
||
/* Sheet112: layout for Attack Penalty moved into Tattered row */
|
||
.armor-defenses-card .ad-row.ad-details{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
}
|
||
.armor-defenses-card .ad-attackpen-inline{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
}
|
||
|
||
/* Sheet113: Prevent wrapping for specific Armor & Defenses labels */
|
||
.armor-defenses-card .nowrap{ white-space: nowrap; }
|
||
|
||
/* Sheet113: Increase AR input font size */
|
||
.armor-defenses-card input[name="attr_Armor_Rating"]{ font-size: 14px; }
|
||
|
||
/* Sheet115: Armor Type row becomes a single full-width input */
|
||
.armor-defenses-card .ad-row.ad-armor-type{
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
.armor-defenses-card .ad-row.ad-armor-type .armor-type-full{
|
||
width: 100%;
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/* Sheet118: Reduce Attack Penalty (Tattered/Attack Penalty) row height by 4px */
|
||
.armor-defenses-card .ad-row.ad-details{
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
}
|
||
|
||
/* Sheet119: Vertically center text in small inputs (Attack Penalty + Other Defenses) */
|
||
.armor-defenses-card .ad-otherdef input,
|
||
.armor-defenses-card .ad-attackpen-inline input{
|
||
line-height: 18px;
|
||
padding-top: 2px;
|
||
padding-bottom: 2px;
|
||
}
|
||
|
||
/* Sheet120: Vertically center text in Attack Penalty + Other Defenses inputs (override existing fixed-height styles) */
|
||
.armor-defenses-card .ad-attackpen-inline input{
|
||
padding-top: 0 !important;
|
||
padding-bottom: 0 !important;
|
||
line-height: 22px !important; /* matches the 22px fixed height used by ad-input */
|
||
}
|
||
.armor-defenses-card .ad-block.ad-otherdef input.ad-td-input{
|
||
padding-top: 0 !important;
|
||
padding-bottom: 0 !important;
|
||
line-height: 22px !important;
|
||
}
|
||
|
||
/* Sheet120: Make Other Defenses outline match Armor section (avoid double border by removing inner table border) */
|
||
.armor-defenses-card .ad-block.ad-otherdef .ad-table{
|
||
border: 0 !important;
|
||
}
|
||
|
||
|
||
/* Sheet122: Reduce effective width of Armor & Defenses card by 10px
|
||
(grid-controlled card; reduce horizontal padding instead) */
|
||
.armor-defenses-card{
|
||
padding-left: calc(var(--card-padding, 10px) - 5px);
|
||
padding-right: calc(var(--card-padding, 10px) - 5px);
|
||
}
|
||
|
||
/* Sheet127: Font size adjustments requested */
|
||
|
||
/* Armor Rating input +2 */
|
||
.armor-defenses-card .ad-box-ar{
|
||
font-size: 14px;
|
||
}
|
||
|
||
/* Attack Penalty input +2 */
|
||
.armor-defenses-card input[name="attr_Attack_Penalty"]{
|
||
font-size: 14px;
|
||
}
|
||
|
||
/* Reduce FORT / REF / WILL label size by 2 */
|
||
.save-name{
|
||
font-size: 10px;
|
||
}
|
||
|
||
/* Sheet128: Force font size changes (override ad-input !important base) */
|
||
.armor-defenses-card input.ad-input[name="attr_Armor_Rating"]{
|
||
font-size: 14px !important; /* +2 from 12px base */
|
||
}
|
||
.armor-defenses-card input.ad-input[name="attr_Attack_Penalty"]{
|
||
font-size: 14px !important; /* +2 from 12px base */
|
||
}
|
||
|
||
/* Sheet128: Reduce FORT/REF/WILL label size by 2 (scope to AC & Saves card) */
|
||
.armor-saves-card .save-name{
|
||
font-size: 18px !important; /* from 20px */
|
||
}
|
||
|
||
/* Sheet129: Increase AR input font size by +2 */
|
||
.armor-defenses-card input.ad-input[name="attr_Armor_Rating"]{
|
||
font-size: 16px !important;
|
||
}
|
||
|
||
/* Sheet129: Move Saving Throws boxes/labels 5px left by tightening first grid column */
|
||
.armor-saves-card .saving-header,
|
||
.armor-saves-card .save-row{
|
||
grid-template-columns: 61px 42px 18px 42px 18px 42px 18px 42px;
|
||
}
|
||
|
||
/* Sheet130: Collapsible Armor & Defenses card (Front tab only) */
|
||
.armor-defenses-card .ad-card-toggle{ display:none; }
|
||
.armor-defenses-card .card-title.ad-card-toggle-btn{
|
||
position: relative;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
padding-right: 22px;
|
||
}
|
||
.armor-defenses-card .card-title.ad-card-toggle-btn::after{
|
||
content: "▼";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
.armor-defenses-card .ad-card-toggle:not(:checked) + .card-title.ad-card-toggle-btn::after{
|
||
content: "▶";
|
||
}
|
||
.armor-defenses-card .ad-card-collapsible{ display:none; }
|
||
.armor-defenses-card .ad-card-toggle:checked + .card-title.ad-card-toggle-btn + .ad-card-collapsible{
|
||
display:block;
|
||
}
|
||
|
||
/* sheet139: Boot Sheath weight fields narrower */
|
||
.boot-sheath input[placeholder^="Wt"]{ width:50%; }
|
||
|
||
/* sheet139: separator before TOTAL EQUIPPED */
|
||
.equip-sep{
|
||
grid-column: 1 / -1;
|
||
border-top: 1px solid #000;
|
||
margin: 2px 0;
|
||
}
|
||
|
||
/* sheet141: ensure Boot Sheath item fields remain readable */
|
||
.boot-sheath input[placeholder^="Boot Sheath"]{
|
||
min-width: 100px;
|
||
}
|
||
|
||
/* sheet144: make Boot Sheath Wt column truly narrower without leaving right-side whitespace */
|
||
.boot-sheath .inv-row{
|
||
grid-template-columns: 28px 1fr 40px; /* 80px -> 40px (50%) */
|
||
}
|
||
.boot-sheath input[placeholder^="Wt"]{
|
||
width: 100%;
|
||
min-width: 0;
|
||
justify-self: stretch;
|
||
}
|
||
|
||
|
||
/* sheet145: Capacity & Encumbrance subcard */
|
||
.capacity-encumbrance .cap-block{
|
||
border: 1px solid #000;
|
||
margin-top: 6px;
|
||
padding: 4px;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-header{
|
||
font-weight: 700;
|
||
text-transform: uppercase;
|
||
text-align: center;
|
||
border-bottom: 1px solid #000;
|
||
padding-bottom: 2px;
|
||
margin-bottom: 4px;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-row{
|
||
display: grid;
|
||
grid-template-columns: 1fr 70px;
|
||
gap: 6px;
|
||
align-items: center;
|
||
margin-top: 2px;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-label{
|
||
font-size: 0.9em;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-row input{
|
||
width: 100%;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-grid{
|
||
display: grid;
|
||
grid-template-columns: 1fr 80px 55px;
|
||
gap: 6px;
|
||
align-items: center;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-grid-head{
|
||
font-weight: 700;
|
||
font-size: 0.85em;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-grid-right{
|
||
grid-column: 3;
|
||
text-align: center;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-grid-label{
|
||
font-size: 0.9em;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-grid-input{
|
||
width: 100%;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-grid-penalty{
|
||
text-align: center;
|
||
font-weight: 700;
|
||
}
|
||
|
||
/* sheet147: TOTAL EQUIPPED WEIGHT spans name+wt columns and aligns with Wt fields */
|
||
input[name="attr_TotalEquippedWeight"]{
|
||
grid-column: 2 / 4;
|
||
width: 100%;
|
||
min-width: 160px;
|
||
}
|
||
|
||
|
||
/* sheet149: Equip Slots weight column header */
|
||
.equip-weight-header{
|
||
font-size: 0.85em;
|
||
line-height: 1;
|
||
}
|
||
.equip-weight-header-text{
|
||
text-align: center;
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* sheet150: Equip Slots column headers */
|
||
.equip-header-row{
|
||
margin-bottom: 2px;
|
||
}
|
||
.equip-header-row .equip-col-header{
|
||
text-align: center;
|
||
font-weight: 700;
|
||
font-size: 0.85em;
|
||
line-height: 1;
|
||
}
|
||
|
||
|
||
/* sheet151: tighten Gear & Equipment card width */
|
||
.gear-equipment{
|
||
padding-left: calc(var(--card-padding, 10px) - 5px);
|
||
padding-right: calc(var(--card-padding, 10px) - 5px);
|
||
}
|
||
|
||
|
||
/* sheet152: tighten Equip Slots row label column by 15px (moves fields closer to labels) */
|
||
.equip-slots .equip-row{
|
||
grid-template-columns: 105px 1fr 80px;
|
||
}
|
||
|
||
|
||
/* sheet152: TOTAL EQUIPPED WEIGHT slightly narrower but right-aligned with Weight column */
|
||
.equip-slots input[name="attr_TotalEquippedWeight"]{
|
||
width: calc(100% - 15px);
|
||
justify-self: end;
|
||
}
|
||
|
||
|
||
/* sheet153: Backpack repeating rows + total */
|
||
.backpack-card fieldset.repeating_backpack{
|
||
border: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
display: grid;
|
||
gap: 6px;
|
||
}
|
||
|
||
/* Number repeating rows starting at 6 (after fixed 1–5) */
|
||
.backpack-card{
|
||
counter-reset: backpackrep 5;
|
||
}
|
||
.backpack-card fieldset.repeating_backpack .repitem{
|
||
counter-increment: backpackrep;
|
||
}
|
||
.backpack-card fieldset.repeating_backpack .repitem .rep-index::before{
|
||
content: counter(backpackrep);
|
||
}
|
||
|
||
/* Separator line before total */
|
||
.backpack-card .inv-sep{
|
||
border-top: 1px solid #000;
|
||
margin-top: 2px;
|
||
}
|
||
|
||
/* Total backpack weight row: single field spanning name+weight columns, right-aligned */
|
||
.backpack-card .inv-total-row input[name="attr_TotalBackpackWeight"]{
|
||
grid-column: 2 / 4;
|
||
width: 100%;
|
||
justify-self: end;
|
||
min-width: 160px;
|
||
}
|
||
|
||
|
||
/* sheet154: Backpack remove numbered column + consistent spacing */
|
||
.backpack-card .inv-grid{
|
||
gap: 6px;
|
||
}
|
||
.backpack-card .inv-row{
|
||
grid-template-columns: 1fr 80px;
|
||
gap: 6px;
|
||
}
|
||
.backpack-card .inv-row input{
|
||
width: 100%;
|
||
}
|
||
|
||
/* Total backpack weight spans both columns */
|
||
.backpack-card .inv-total-row input[name="attr_TotalBackpackWeight"]{
|
||
grid-column: 1 / 3;
|
||
justify-self: end;
|
||
}
|
||
|
||
|
||
/* sheet154: Equip Slots label column 15px tighter */
|
||
.equip-slots .equip-row{
|
||
grid-template-columns: 90px 1fr 80px;
|
||
}
|
||
|
||
/* sheet154: Equipped Item inputs 10px narrower, keep right edge aligned (gap to Weight stays the same) */
|
||
.equip-slots input[placeholder$=" Equip"]{
|
||
width: calc(100% - 10px);
|
||
justify-self: end;
|
||
}
|
||
|
||
|
||
/* sheet155: Carried Item inputs match Equipped Item input width */
|
||
.equip-slots input[placeholder^="Carried Item"]{
|
||
width: calc(100% - 10px);
|
||
justify-self: end;
|
||
}
|
||
|
||
|
||
/* sheet155: Backpack repeating row spacing matches fixed rows */
|
||
.backpack-card fieldset.repeating_backpack{
|
||
display: block;
|
||
}
|
||
.backpack-card fieldset.repeating_backpack .repitem{
|
||
margin: 0;
|
||
}
|
||
.backpack-card fieldset.repeating_backpack .repitem + .repitem{
|
||
margin-top: 6px;
|
||
}
|
||
.backpack-card fieldset.repeating_backpack .repitem .inv-row{
|
||
margin: 0;
|
||
}
|
||
|
||
|
||
/* sheet170: Gear & Equipment - reduce all Wt fields by 25% (80px -> 60px) and keep spacing consistent */
|
||
.gear-equipment .inv-row{
|
||
grid-template-columns: 28px 1fr 60px;
|
||
gap: 6px;
|
||
}
|
||
|
||
.gear-equipment .equip-row{
|
||
grid-template-columns: 120px 1fr 60px;
|
||
gap: 6px;
|
||
}
|
||
|
||
/* Ensure all Wt inputs within Gear & Equipment fit the new column width */
|
||
.gear-equipment input[placeholder^="Wt"]{
|
||
width: 100%;
|
||
max-width: 60px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet171 – Equip Slots: shift item + weight columns 20px left and narrow card by 20px */
|
||
|
||
/* Reduce right padding / width so card is 20px thinner */
|
||
.gear-equipment .equip-slots{
|
||
padding-right: 10px;
|
||
padding-left: 10px;
|
||
}
|
||
|
||
/* Shift Equipped Item + Weight columns left */
|
||
.gear-equipment .equip-row{
|
||
grid-template-columns: 120px calc(1fr - 20px) 60px;
|
||
column-gap: 6px;
|
||
}
|
||
|
||
/* Ensure inputs still fill their columns */
|
||
.gear-equipment .equip-row input{
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet172 – Equip Slots: shift item + weight columns 30px left and narrow card by 30px */
|
||
|
||
/* Make the Equip Slots card 30px thinner */
|
||
.gear-equipment .equip-slots{
|
||
padding-right: 5px;
|
||
padding-left: 5px;
|
||
}
|
||
|
||
/* Shift Equipped Item + Weight columns 30px closer to labels */
|
||
.gear-equipment .equip-row{
|
||
grid-template-columns: 120px calc(1fr - 30px) 60px;
|
||
column-gap: 6px;
|
||
}
|
||
|
||
/* Inputs fill their adjusted columns */
|
||
.gear-equipment .equip-row input{
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet173 – Fix Equip Slots shift: use valid grid sizing (no calc with fr) */
|
||
|
||
/* Make Equip Slots subcard 30px thinner by reducing its width (left edge stays put) */
|
||
.gear-equipment .equip-slots{
|
||
box-sizing: border-box;
|
||
width: calc(100% - 30px);
|
||
}
|
||
|
||
/* Shift Equipped Item + Weight columns 30px left by shrinking the label column */
|
||
.gear-equipment .equip-slots .equip-row{
|
||
grid-template-columns: 90px 1fr 60px;
|
||
gap: 6px;
|
||
}
|
||
|
||
|
||
/* sheet174 – Backpack field widths match Equip Slots (Equipped Item + Weight columns) */
|
||
|
||
/* Match Backpack subcard overall width to Equip Slots subcard width */
|
||
.gear-equipment .backpack-card{
|
||
box-sizing: border-box;
|
||
width: calc(100% - 30px);
|
||
}
|
||
|
||
/* Use the same column sizing as Equip Slots: label-area 90px, item 1fr, weight 60px */
|
||
.gear-equipment .backpack-card .inv-row{
|
||
grid-template-columns: 90px 1fr 60px;
|
||
gap: 6px;
|
||
}
|
||
|
||
/* Keep the numbered squares at the right edge of the 90px label area */
|
||
.gear-equipment .backpack-card .inv-label{
|
||
justify-self: end;
|
||
}
|
||
|
||
/* Ensure Backpack Item + Wt inputs fill their columns (matching Equip Slots behavior) */
|
||
.gear-equipment .backpack-card .inv-row input{
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* TOTAL BACKPACK WEIGHT row uses the same grid sizing */
|
||
.gear-equipment .backpack-card .inv-total-row{
|
||
grid-template-columns: 90px 1fr 60px;
|
||
gap: 6px;
|
||
}
|
||
|
||
|
||
/* sheet176 – Backpack: item column min/max widths + placeholder fix support */
|
||
.gear-equipment .backpack-card .inv-row{
|
||
grid-template-columns: 90px minmax(100px, 350px) 60px !important;
|
||
gap: 6px;
|
||
}
|
||
|
||
|
||
/* sheet177 – Backpack: match Equip Slots right edge + responsive item field (100–350px) */
|
||
|
||
/* Match Backpack subcard right edge to Equip Slots (which is 30px thinner) */
|
||
.gear-equipment .backpack-card{
|
||
box-sizing: border-box;
|
||
width: calc(100% - 30px);
|
||
}
|
||
|
||
/* Make Backpack rows use the same overall column geometry as Equip Slots:
|
||
label 90px, item flexible, wt 60px */
|
||
.gear-equipment .backpack-card .inv-row,
|
||
.gear-equipment .backpack-card .inv-total-row{
|
||
grid-template-columns: 90px minmax(100px, 1fr) 60px !important;
|
||
gap: 6px;
|
||
}
|
||
|
||
/* Backpack Item fields: shrink to 100px, grow with column, but cap at 350px */
|
||
.gear-equipment .backpack-card input[placeholder="Backpack Item"]{
|
||
min-width: 100px !important;
|
||
max-width: 350px !important;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* Keep Wt fields sized to the 60px column */
|
||
.gear-equipment .backpack-card input[placeholder^="Wt"]{
|
||
width: 100%;
|
||
max-width: 60px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet178 – Backpack: hug content (<=5px extra) and prevent Item/Wt overlap */
|
||
|
||
/* Make Backpack subcard size to its contents instead of stretching */
|
||
.gear-equipment .backpack-card{
|
||
box-sizing: border-box;
|
||
display: inline-block;
|
||
width: fit-content;
|
||
max-width: 100%;
|
||
padding-right: 5px; /* <=5px beyond contents */
|
||
}
|
||
|
||
/* Lock row geometry so item column cannot spill into Wt column */
|
||
.gear-equipment .backpack-card .inv-row,
|
||
.gear-equipment .backpack-card .inv-total-row{
|
||
grid-template-columns: 90px minmax(100px, 350px) 60px !important;
|
||
column-gap: 6px;
|
||
}
|
||
|
||
/* Critical: allow grid items to shrink within their column (prevents overlap in CSS grid) */
|
||
.gear-equipment .backpack-card .inv-row > *,
|
||
.gear-equipment .backpack-card .inv-total-row > *{
|
||
min-width: 0;
|
||
}
|
||
|
||
/* Inputs fill their own columns, never exceeding them */
|
||
.gear-equipment .backpack-card input[placeholder="Backpack Item"]{
|
||
width: 100%;
|
||
min-width: 100px !important;
|
||
max-width: 350px !important;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.gear-equipment .backpack-card input[placeholder^="Wt"]{
|
||
width: 100%;
|
||
max-width: 60px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet179 – Backpack: 10px gap between Item and Wt; right edge within 10px of Wt column */
|
||
|
||
/* Set the gap between Backpack Item and Wt columns to 10px (between col 2 and col 3) */
|
||
.gear-equipment .backpack-card .inv-row,
|
||
.gear-equipment .backpack-card .inv-total-row{
|
||
column-gap: 10px;
|
||
}
|
||
|
||
/* Keep Backpack card right padding to 10px so right edge is within 10px of Wt column */
|
||
.gear-equipment .backpack-card{
|
||
padding-right: 10px;
|
||
}
|
||
|
||
|
||
/* sheet181 – Backpack Test: remove label column, hug content, keep inputs near left edge */
|
||
.gear-equipment .backpack-test{
|
||
box-sizing: border-box;
|
||
display: inline-block;
|
||
width: fit-content;
|
||
max-width: 100%;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
.gear-equipment .backpack-test .equip-row{
|
||
grid-template-columns: 1fr 60px;
|
||
gap: 6px;
|
||
justify-content: start;
|
||
}
|
||
|
||
/* Ensure inputs shrink properly inside CSS grid (prevents overlap) */
|
||
.gear-equipment .backpack-test .equip-row > *{
|
||
min-width: 0;
|
||
}
|
||
|
||
.gear-equipment .backpack-test .equip-row input{
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet183 – Backpack Test: fix header row to 2 columns (no wrapped header labels) */
|
||
.gear-equipment .backpack-test .equip-row.equip-header-row{
|
||
grid-template-columns: 1fr 60px;
|
||
gap: 6px;
|
||
}
|
||
|
||
.gear-equipment .backpack-test .equip-row.equip-header-row .equip-col-header{
|
||
text-align: center;
|
||
}
|
||
|
||
|
||
/* sheet189 – Backpack Test: total row spans full width (no extra columns) */
|
||
.gear-equipment .backpack-test .equip-row.backpack-total-row{
|
||
grid-template-columns: 1fr;
|
||
}
|
||
|
||
|
||
/* sheet197a – Backpack: repeating rows without affecting card width/layout */
|
||
.gear-equipment .backpack-test fieldset.repeating_backpack{
|
||
margin: 0;
|
||
padding: 0;
|
||
border: 0;
|
||
}
|
||
|
||
.gear-equipment .backpack-test .repcontainer,
|
||
.gear-equipment .backpack-test .repitem{
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
/* Keep repeating row aligned with existing grid */
|
||
.gear-equipment .backpack-test fieldset.repeating_backpack .equip-row{
|
||
grid-template-columns: 1fr 60px;
|
||
gap: 6px;
|
||
}
|
||
|
||
|
||
/* sheet198a – Gold & Money card uses existing equip-grid styling; keep it compact */
|
||
.card.gold-money .equip-grid{ margin: 0; }
|
||
|
||
|
||
/* sheet199b – constrain Gold & Money card size and field widths */
|
||
.card.gold-money{
|
||
max-height: 60px;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
}
|
||
|
||
.card.gold-money .card-title{
|
||
margin-bottom: 4px;
|
||
}
|
||
|
||
.card.gold-money .equip-grid{
|
||
gap: 4px;
|
||
}
|
||
|
||
.card.gold-money .equip-row{
|
||
grid-template-columns: 1.5fr 0.5fr;
|
||
}
|
||
|
||
.card.gold-money input[name="attr_Gold"]{
|
||
max-width: 50%;
|
||
}
|
||
|
||
.card.gold-money input[name="attr_GemsValuables"]{
|
||
width: 100%;
|
||
}
|
||
|
||
|
||
/* sheet200a – Gold & Money moved inside Gear & Equipment as first subcard */
|
||
.gear-equipment .gold-money-subcard .equip-grid{
|
||
margin: 0;
|
||
}
|
||
|
||
.gear-equipment .gold-money-subcard .equip-row{
|
||
grid-template-columns: 1.5fr 0.5fr; /* Gems wider, Gold narrower */
|
||
gap: 6px;
|
||
}
|
||
|
||
.gear-equipment .gold-money-subcard{
|
||
padding-bottom: 6px;
|
||
}
|
||
|
||
.gear-equipment .gold-money-subcard .equip-sep{
|
||
margin: 2px 0;
|
||
}
|
||
|
||
|
||
/* sheet202b – Make Gold & Money subcard width match Equip Slots at minimum size (scoped) */
|
||
.gear-equipment .gold-money-subcard{
|
||
box-sizing: border-box;
|
||
width: calc(100% - 30px);
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
|
||
/* sheet205 – Gold & Money: resizable Gems & Valuables textarea (starts taller) */
|
||
.gear-equipment .gold-money-subcard textarea.gm-gems-text{
|
||
width: 100%;
|
||
min-height: 26px;
|
||
height: 26px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet205 – Boot Sheath: remove number column */
|
||
.inv-sheaths .boot-sheath .inv-row{
|
||
grid-template-columns: 1fr 45px;
|
||
}
|
||
|
||
|
||
/* sheet206 – Boot Sheath: delete numbered squares */
|
||
.inv-sheaths .boot-sheath .inv-label{
|
||
display: none;
|
||
}
|
||
|
||
.inv-sheaths .boot-sheath .inv-row{
|
||
grid-template-columns: 1fr 45px;
|
||
}
|
||
|
||
|
||
/* sheet207 – Skills card: avoid grid row stretching and tighten height */
|
||
.skills-card{
|
||
align-self: start; /* stop CSS grid stretching this card to match neighbor height */
|
||
padding-bottom: 10px; /* keep ~10px below last content */
|
||
}
|
||
|
||
/* Total Skill Ranks box: 50% width, no impact on card width */
|
||
.skills-card input[name="attr_Total_Skill_Ranks"]{
|
||
width: 50%;
|
||
max-width: 50%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* sheet208 – Skills: shift Total Skill Ranks label + field 20px right */
|
||
.skills-card .skills-totalranks{
|
||
margin-left: 20px;
|
||
}
|
||
|
||
|
||
/* sheet211: ensure Belt Pouches item fields remain readable */
|
||
.belt-pouches input[placeholder^="Pouch Item"]{
|
||
min-width: 100px;
|
||
}
|
||
|
||
|
||
/* sheet214: Belt Pouches total weight row */
|
||
.belt-pouches .pouch-total-row{
|
||
display: grid;
|
||
grid-template-columns: minmax(0, 1fr) 45px;
|
||
gap: 6px;
|
||
align-items: center;
|
||
}
|
||
.belt-pouches .pouch-total-row input{
|
||
width: 100%;
|
||
min-width: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet217: Total weight row (shared layout) */
|
||
.pouch-total-row{
|
||
display: grid;
|
||
grid-template-columns: 1fr;
|
||
}
|
||
.pouch-total-row input{
|
||
width: 100%;
|
||
min-width: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet217: ensure Sheaths & Bandoliers item fields remain readable (matches Boot/Belt behavior) */
|
||
.inv-sheaths .boot-sheath .inv-row input:first-child{
|
||
min-width: 100px;
|
||
}
|
||
|
||
|
||
/* sheet219: Capacity & Encumbrance header note */
|
||
.cap-grid-lefthead{
|
||
text-align: left;
|
||
}
|
||
.cap-grid-lefthead .cap-grid-note{
|
||
font-weight: normal;
|
||
font-style: italic;
|
||
font-size: 10px;
|
||
line-height: 1.2;
|
||
}
|
||
|
||
|
||
/* sheet223: Capacity & Encumbrance – widen With/Without Backpack fields by 25px (grow left, keep right edge) */
|
||
.capacity-encumbrance .cap-row{
|
||
grid-template-columns: 1fr 95px; /* was 70px */
|
||
}
|
||
|
||
/* sheet223: Skills – prevent Total column inputs from compressing below 25px */
|
||
.skill-row > input:first-child{
|
||
min-width: 25px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet224: enforce minimum width for Skills Total column */
|
||
.skill-row > input:first-child{
|
||
min-width: 35px !important;
|
||
width: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet225: Capacity & Encumbrance – combined totals grid */
|
||
.capacity-encumbrance .cap-totals-grid{
|
||
display: grid;
|
||
grid-template-columns: 1fr 95px 95px;
|
||
gap: 6px;
|
||
align-items: center;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-totals-head{
|
||
font-weight: 700;
|
||
font-size: 0.85em;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-totals-left{
|
||
text-align: left;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-totals-sep{
|
||
grid-column: 1 / -1;
|
||
border-top: 1px solid #000;
|
||
margin: 2px 0;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-totals-label{
|
||
font-size: 0.9em;
|
||
}
|
||
|
||
.capacity-encumbrance .cap-totals-grid input{
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet226: Capacity & Encumbrance – evenly distribute totals columns (no width increase) */
|
||
.capacity-encumbrance .cap-totals-grid{
|
||
grid-template-columns: 1fr 1fr 1fr;
|
||
}
|
||
|
||
/* sheet226: make TOTALS header 2px larger */
|
||
.capacity-encumbrance .cap-totals-head.cap-totals-left{
|
||
font-size: calc(0.85em + 2px);
|
||
}
|
||
|
||
/* Skills card: physical-skill note (does not affect column sizing) */
|
||
.skills-card .skills-physnote{
|
||
font-size: 10px;
|
||
font-style: italic;
|
||
font-weight: normal;
|
||
margin: 4px 0 2px 0;
|
||
}
|
||
|
||
|
||
/* sheet231: place Total Skill Ranks input adjacent to label */
|
||
.skills-totalranks{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
}
|
||
.skills-totalranks label{
|
||
white-space: nowrap;
|
||
}
|
||
.skills-totalranks input{
|
||
width: auto;
|
||
}
|
||
|
||
|
||
/* sheet235: Align Backpack, Sheaths & Bandoliers, and Belt Pouches cards on the same row when space allows */
|
||
.inv-sheaths{
|
||
display: contents;
|
||
}
|
||
|
||
/* Shared sizing: match max width across the three cards */
|
||
.gear-equipment .backpack-test,
|
||
.inv-sheaths .boot-sheath,
|
||
.inv-sheaths .belt-pouches{
|
||
display: inline-block;
|
||
vertical-align: top;
|
||
width: 100%;
|
||
max-width: 340px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet236: third tab (Spells & Magic) */
|
||
#tab-magic:checked ~ .tabs label[for="tab-magic"]{
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
}
|
||
#tab-magic:checked ~ .page-magic{ display:block; }
|
||
|
||
/* Spells & Magic page styling */
|
||
|
||
.magic-card{
|
||
padding-top: 8px;
|
||
}
|
||
|
||
.magic-subtitle{
|
||
font-weight: 700;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.magic-row{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 18px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.magic-label{
|
||
font-weight: 700;
|
||
font-variant: small-caps;
|
||
letter-spacing: 0.5px;
|
||
}
|
||
|
||
.magic-pair{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
|
||
.magic-pair.wide{
|
||
flex: 1 1 260px;
|
||
justify-content: flex-start;
|
||
}
|
||
|
||
.magic-group{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
}
|
||
|
||
.magic-inline{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
|
||
.magic-box{
|
||
background: #f2f2f2;
|
||
border: 2px solid #000;
|
||
height: 26px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.magic-box.small{ width: 46px; }
|
||
.magic-box.medium{ width: 90px; }
|
||
|
||
.magic-notes{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 6px 10px;
|
||
align-items: start;
|
||
}
|
||
|
||
.magic-notes-label{
|
||
font-weight: 700;
|
||
padding-top: 4px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.magic-notes-box{
|
||
grid-column: 2 / -1;
|
||
height: 26px;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
resize: none;
|
||
padding: 2px 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet238: Spells & Magic – match card header font styling */
|
||
.page-magic .magic-card{
|
||
font-size: 13px;
|
||
}
|
||
|
||
.page-magic .magic-subtitle{
|
||
font-size: 13px;
|
||
font-weight: bold;
|
||
}
|
||
|
||
/* Match all text in the card to the header style (no small-caps treatment) */
|
||
.page-magic .magic-label{
|
||
font-weight: bold;
|
||
font-variant: normal;
|
||
letter-spacing: normal;
|
||
}
|
||
|
||
/* sheet238: remove bottom line from Spellcasting Notes boxes */
|
||
.page-magic .magic-notes-box{
|
||
border-bottom: none !important;
|
||
}
|
||
|
||
|
||
/* sheet239: Spells & Magic layout adjustments */
|
||
.page-magic .magic-row{
|
||
flex-wrap: nowrap;
|
||
gap: 12px;
|
||
}
|
||
|
||
/* Reduce CastingMod box width by ~35% (from 90px to 58px) */
|
||
.page-magic .magic-box.medium{ width: 58px; }
|
||
|
||
/* Let notes boxes span full card width now that label removed */
|
||
.page-magic .magic-notes{
|
||
grid-template-columns: 1fr;
|
||
}
|
||
.page-magic .magic-notes-box{
|
||
grid-column: 1 / -1;
|
||
}
|
||
|
||
|
||
/* sheet240: Spellcasting Notes single resizable box */
|
||
.page-magic .magic-notes-box{
|
||
height: 60px;
|
||
resize: vertical;
|
||
}
|
||
|
||
|
||
/* sheet241: responsive wrapping + minimum width for Spellcasting Information */
|
||
.page-magic .magic-card{
|
||
min-width: 350px;
|
||
}
|
||
|
||
.page-magic .magic-row{
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
|
||
/* sheet242: adjust Spellcasting Information card minimum width after label shortening */
|
||
.page-magic .magic-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl0-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.sl0-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
.sl0-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.sl0-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.sl0-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.sl0-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.sl0-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.sl0-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.sl0-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
.sl0-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.sl0-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl0-spellrow.sl0-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
.sl0-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.sl0-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.sl0-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl0-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl0-title{ display: none; }
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl0-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl0-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl0-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl0-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl0-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl0-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
.sl0-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl0-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
.sl0-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl0-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl0-line{
|
||
height: 20px;
|
||
}
|
||
|
||
.sl0-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl0-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
.sl0-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl0-card textarea.sl0-knownarea,
|
||
.page-magic .sl0-card textarea.sl0-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl0-card textarea.sl0-knownarea,
|
||
.page-magic .sl0-card textarea.sl0-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet250: restore tab selected (white/pressed) vs unselected (grey) styling */
|
||
.tabs{
|
||
gap: 8px !important;
|
||
margin-bottom: 10px !important;
|
||
}
|
||
|
||
.tabs .tabbtn{
|
||
border: 1px solid #333 !important;
|
||
padding: 6px 10px !important;
|
||
border-radius: 6px !important;
|
||
cursor: pointer !important;
|
||
user-select: none !important;
|
||
font-weight: 700 !important;
|
||
background: #e0e0e0 !important; /* unselected grey */
|
||
position: relative !important;
|
||
top: 0 !important;
|
||
}
|
||
|
||
/* Active tab: white + looks pressed */
|
||
#tab-front:checked ~ .tabs label[for="tab-front"],
|
||
#tab-back:checked ~ .tabs label[for="tab-back"],
|
||
#tab-magic:checked ~ .tabs label[for="tab-magic"]{
|
||
background: #fff !important;
|
||
top: 1px !important;
|
||
}
|
||
|
||
|
||
/* sheet251: Spellcasting Information - Spells Known min-height +5px */
|
||
.page-magic .magic-notes-box{
|
||
min-height: 65px; /* was 60px in sheet240 */
|
||
}
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl0-card textarea.sl0-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl0-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl0-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl0-card textarea.sl0-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet258: Spell Info card (extracted from SL0 spell box) */
|
||
.page-magic .spellinfo-card{
|
||
min-width: 335px; /* match magic-card and sl0-card */
|
||
}
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl0-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl0-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
.page-magic .sl0-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl0-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl0-spellrow-name .sl0-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl0-card, .sl0-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl0-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl0-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl0-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl0-topitem .sl0-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl0-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
.sl0-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
.sl0-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl0-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
.sl0-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl0-spellrow input.sl0-line,
|
||
.sl0-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl0-spellrow-name input.sl0-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl0-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl0-spellbox,
|
||
.sl0-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl0-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
.sl0-spellrow-name .sl0-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
.sl0-spellrow-name .sl0-line.time,
|
||
.sl0-spellrow-name .sl0-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl0-card, .sl0-card * { box-sizing: border-box; }
|
||
|
||
.sl0-card,
|
||
.sl0-spellbox,
|
||
.sl0-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
.sl0-spellrow,
|
||
.sl0-knownrow,
|
||
.sl0-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
.sl0-spellrow input,
|
||
.sl0-spellrow textarea,
|
||
.sl0-knownrow textarea,
|
||
.sl0-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl0-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
/* If the window becomes too narrow to honor min-widths + labels,
|
||
allow wrapping within the Spell Info row instead of overflowing. */
|
||
@media (max-width: 700px) {
|
||
.sl0-spellrow-name { flex-wrap: wrap; }
|
||
.sl0-spellrow-name .sl0-spelllabel { white-space: nowrap; }
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl0-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
/* Allow the row to wrap by pair when needed, without breaking pairs */
|
||
@media (max-width: 700px){
|
||
.sl0-spellrow-name{ flex-wrap: wrap; }
|
||
}
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl0-spellpair .sl0-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl0-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl0-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl0-spellpair.pair-name{ flex:3 1 0; }
|
||
.sl0-spellpair.pair-time{ flex:2 1 0; }
|
||
.sl0-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl0-spellpair .sl0-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
/* Responsive: if too narrow, wrap by PAIR (never split label from field) */
|
||
@media (max-width: 700px){
|
||
.sl0-spellrow-name{ flex-wrap:wrap; }
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl0-spellrow-name{ flex-wrap: wrap; }
|
||
.sl0-spellpair.namepair{ flex: 3 1 0; }
|
||
.sl0-spellpair.timepair{ flex: 2 1 0; }
|
||
.sl0-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl0-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
.sl0-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl0-spellpair-name{ flex: 3 1 0; }
|
||
.sl0-spellpair-time{ flex: 2 1 0; }
|
||
.sl0-spellpair-range{ flex: 2 1 0; }
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl0-spellpair .sl0-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl0-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl0-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl0-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl0-spellpair-name{ min-width: 320px; }
|
||
.sl0-spellpair-time{ min-width: 220px; }
|
||
.sl0-spellpair-range{ min-width: 200px; }
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl0-spellpair-name{ flex: 3 0 auto; }
|
||
.sl0-spellpair-time,
|
||
.sl0-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
/* Spell Info – force Casting Time + Range pairs to drop to new rows on narrow widths */
|
||
@media (max-width: 620px){
|
||
.sl0-spellpair-time,
|
||
.sl0-spellpair-range{
|
||
flex-basis: 100% !important; /* each pair becomes a full row */
|
||
width: 100% !important;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl0-spellbox .sl0-spellrow.sl0-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
/* Keep each label+field together */
|
||
.sl0-spellbox .sl0-spellrow.sl0-spellrow-name .sl0-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl0-spellbox .sl0-spellrow.sl0-spellrow-name .sl0-spellpair .sl0-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* On narrow widths, force Casting Time + Range pairs onto their own rows */
|
||
@media (max-width: 700px){
|
||
.sl0-spellbox .sl0-spellrow.sl0-spellrow-name .timepair,
|
||
.sl0-spellbox .sl0-spellrow.sl0-spellrow-name .rangepair{
|
||
flex-basis: 100% !important;
|
||
width: 100% !important;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/* ===== Collapsible Spell Level 0 Card (SL0) ===== */
|
||
.sl0-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
/* Button styled like Identity & XP */
|
||
.sl0-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px; /* room for arrow */
|
||
}
|
||
|
||
.sl0-toggle-btn::after{
|
||
content: "◀"; /* collapsed */
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl0-toggle:checked + .sl0-toggle-btn::after{
|
||
content: "▼"; /* expanded */
|
||
color: #000;
|
||
}
|
||
|
||
.sl0-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
/* Collapse/expand: checkbox and label directly before .sl0-body */
|
||
.sl0-toggle:not(:checked) + .sl0-toggle-btn + .sl0-body{
|
||
display: none;
|
||
}
|
||
|
||
|
||
|
||
/* ===== Collapsible Spell Level 1 Card (SL1) ===== */
|
||
.sl1-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl1-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px; /* room for arrow */
|
||
}
|
||
|
||
.sl1-toggle-btn::after{
|
||
content: "◀"; /* collapsed */
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl1-toggle:checked + .sl1-toggle-btn::after{
|
||
content: "▼"; /* expanded */
|
||
color: #000;
|
||
}
|
||
|
||
.sl1-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl1-toggle:not(:checked) + .sl1-toggle-btn + .sl1-body{
|
||
display: none;
|
||
}
|
||
|
||
|
||
/* ===== SL1 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl1-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl1-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl1-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl1-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl1-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl1-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl1-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl1-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl1-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl1-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl1-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl1-spellrow.sl1-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl1-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl1-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl1-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl1-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl1-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl1-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl1-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl1-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl1-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl1-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl1-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl1-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl1-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl1-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl1-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl1-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl1-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl1-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl1-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl1-card textarea.sl1-knownarea,
|
||
.page-magic .sl1-card textarea.sl1-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl1-card textarea.sl1-knownarea,
|
||
.page-magic .sl1-card textarea.sl1-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl1-card textarea.sl1-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl1-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl1-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl1-card textarea.sl1-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl1-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl1-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl1-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl1-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl1-spellrow-name .sl1-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl1-card, .sl1-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl1-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl1-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl1-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl1-topitem .sl1-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl1-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl1-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl1-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl1-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl1-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl1-spellrow input.sl1-line,
|
||
.sl1-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl1-spellrow-name input.sl1-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl1-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl1-spellbox,
|
||
.sl1-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl1-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl1-spellrow-name .sl1-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl1-spellrow-name .sl1-line.time,
|
||
.sl1-spellrow-name .sl1-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl1-card, .sl1-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl1-card,
|
||
.sl1-spellbox,
|
||
.sl1-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl1-spellrow,
|
||
.sl1-knownrow,
|
||
.sl1-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl1-spellrow input,
|
||
.sl1-spellrow textarea,
|
||
.sl1-knownrow textarea,
|
||
.sl1-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl1-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl1-spellrow-name .sl1-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl1-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl1-spellpair .sl1-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl1-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl1-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl1-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl1-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl1-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl1-spellpair .sl1-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl1-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl1-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl1-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl1-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl1-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl1-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl1-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl1-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl1-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl1-spellpair .sl1-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl1-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl1-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl1-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl1-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl1-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl1-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl1-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl1-spellpair-time,
|
||
.sl1-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl1-spellbox .sl1-spellrow.sl1-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl1-spellbox .sl1-spellrow.sl1-spellrow-name .sl1-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl1-spellbox .sl1-spellrow.sl1-spellrow-name .sl1-spellpair .sl1-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Bulk Spell Level Cards SL2-SL9 ===== */
|
||
|
||
/* ===== Collapsible Spell Level 2 Card (SL2) ===== */
|
||
.sl2-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl2-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl2-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl2-toggle:checked + .sl2-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl2-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl2-toggle:not(:checked) + .sl2-toggle-btn + .sl2-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL2 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl2-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl2-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl2-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl2-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl2-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl2-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl2-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl2-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl2-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl2-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl2-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl2-spellrow.sl2-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl2-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl2-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl2-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl2-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl2-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl2-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl2-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl2-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl2-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl2-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl2-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl2-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl2-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl2-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl2-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl2-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl2-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl2-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl2-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl2-card textarea.sl2-knownarea,
|
||
.page-magic .sl2-card textarea.sl2-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl2-card textarea.sl2-knownarea,
|
||
.page-magic .sl2-card textarea.sl2-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl2-card textarea.sl2-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl2-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl2-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl2-card textarea.sl2-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl2-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl2-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl2-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl2-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl2-spellrow-name .sl2-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl2-card, .sl2-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl2-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl2-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl2-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl2-topitem .sl2-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl2-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl2-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl2-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl2-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl2-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl2-spellrow input.sl2-line,
|
||
.sl2-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl2-spellrow-name input.sl2-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl2-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl2-spellbox,
|
||
.sl2-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl2-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl2-spellrow-name .sl2-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl2-spellrow-name .sl2-line.time,
|
||
.sl2-spellrow-name .sl2-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl2-card, .sl2-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl2-card,
|
||
.sl2-spellbox,
|
||
.sl2-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl2-spellrow,
|
||
.sl2-knownrow,
|
||
.sl2-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl2-spellrow input,
|
||
.sl2-spellrow textarea,
|
||
.sl2-knownrow textarea,
|
||
.sl2-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl2-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl2-spellrow-name .sl2-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl2-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl2-spellpair .sl2-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl2-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl2-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl2-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl2-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl2-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl2-spellpair .sl2-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl2-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl2-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl2-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl2-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl2-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl2-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl2-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl2-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl2-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl2-spellpair .sl2-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl2-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl2-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl2-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl2-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl2-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl2-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl2-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl2-spellpair-time,
|
||
.sl2-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl2-spellbox .sl2-spellrow.sl2-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl2-spellbox .sl2-spellrow.sl2-spellrow-name .sl2-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl2-spellbox .sl2-spellrow.sl2-spellrow-name .sl2-spellpair .sl2-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Collapsible Spell Level 3 Card (SL3) ===== */
|
||
.sl3-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl3-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl3-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl3-toggle:checked + .sl3-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl3-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl3-toggle:not(:checked) + .sl3-toggle-btn + .sl3-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL3 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl3-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl3-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl3-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl3-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl3-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl3-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl3-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl3-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl3-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl3-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl3-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl3-spellrow.sl3-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl3-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl3-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl3-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl3-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl3-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl3-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl3-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl3-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl3-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl3-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl3-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl3-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl3-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl3-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl3-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl3-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl3-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl3-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl3-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl3-card textarea.sl3-knownarea,
|
||
.page-magic .sl3-card textarea.sl3-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl3-card textarea.sl3-knownarea,
|
||
.page-magic .sl3-card textarea.sl3-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl3-card textarea.sl3-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl3-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl3-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl3-card textarea.sl3-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl3-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl3-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl3-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl3-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl3-spellrow-name .sl3-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl3-card, .sl3-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl3-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl3-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl3-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl3-topitem .sl3-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl3-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl3-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl3-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl3-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl3-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl3-spellrow input.sl3-line,
|
||
.sl3-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl3-spellrow-name input.sl3-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl3-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl3-spellbox,
|
||
.sl3-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl3-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl3-spellrow-name .sl3-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl3-spellrow-name .sl3-line.time,
|
||
.sl3-spellrow-name .sl3-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl3-card, .sl3-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl3-card,
|
||
.sl3-spellbox,
|
||
.sl3-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl3-spellrow,
|
||
.sl3-knownrow,
|
||
.sl3-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl3-spellrow input,
|
||
.sl3-spellrow textarea,
|
||
.sl3-knownrow textarea,
|
||
.sl3-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl3-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl3-spellrow-name .sl3-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl3-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl3-spellpair .sl3-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl3-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl3-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl3-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl3-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl3-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl3-spellpair .sl3-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl3-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl3-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl3-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl3-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl3-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl3-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl3-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl3-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl3-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl3-spellpair .sl3-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl3-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl3-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl3-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl3-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl3-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl3-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl3-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl3-spellpair-time,
|
||
.sl3-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl3-spellbox .sl3-spellrow.sl3-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl3-spellbox .sl3-spellrow.sl3-spellrow-name .sl3-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl3-spellbox .sl3-spellrow.sl3-spellrow-name .sl3-spellpair .sl3-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Collapsible Spell Level 4 Card (SL4) ===== */
|
||
.sl4-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl4-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl4-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl4-toggle:checked + .sl4-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl4-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl4-toggle:not(:checked) + .sl4-toggle-btn + .sl4-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL4 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl4-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl4-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl4-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl4-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl4-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl4-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl4-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl4-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl4-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl4-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl4-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl4-spellrow.sl4-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl4-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl4-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl4-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl4-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl4-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl4-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl4-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl4-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl4-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl4-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl4-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl4-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl4-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl4-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl4-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl4-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl4-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl4-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl4-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl4-card textarea.sl4-knownarea,
|
||
.page-magic .sl4-card textarea.sl4-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl4-card textarea.sl4-knownarea,
|
||
.page-magic .sl4-card textarea.sl4-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl4-card textarea.sl4-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl4-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl4-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl4-card textarea.sl4-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl4-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl4-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl4-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl4-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl4-spellrow-name .sl4-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl4-card, .sl4-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl4-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl4-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl4-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl4-topitem .sl4-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl4-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl4-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl4-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl4-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl4-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl4-spellrow input.sl4-line,
|
||
.sl4-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl4-spellrow-name input.sl4-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl4-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl4-spellbox,
|
||
.sl4-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl4-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl4-spellrow-name .sl4-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl4-spellrow-name .sl4-line.time,
|
||
.sl4-spellrow-name .sl4-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl4-card, .sl4-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl4-card,
|
||
.sl4-spellbox,
|
||
.sl4-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl4-spellrow,
|
||
.sl4-knownrow,
|
||
.sl4-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl4-spellrow input,
|
||
.sl4-spellrow textarea,
|
||
.sl4-knownrow textarea,
|
||
.sl4-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl4-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl4-spellrow-name .sl4-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl4-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl4-spellpair .sl4-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl4-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl4-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl4-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl4-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl4-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl4-spellpair .sl4-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl4-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl4-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl4-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl4-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl4-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl4-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl4-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl4-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl4-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl4-spellpair .sl4-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl4-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl4-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl4-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl4-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl4-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl4-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl4-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl4-spellpair-time,
|
||
.sl4-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl4-spellbox .sl4-spellrow.sl4-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl4-spellbox .sl4-spellrow.sl4-spellrow-name .sl4-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl4-spellbox .sl4-spellrow.sl4-spellrow-name .sl4-spellpair .sl4-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Collapsible Spell Level 5 Card (SL5) ===== */
|
||
.sl5-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl5-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl5-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl5-toggle:checked + .sl5-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl5-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl5-toggle:not(:checked) + .sl5-toggle-btn + .sl5-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL5 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl5-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl5-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl5-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl5-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl5-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl5-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl5-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl5-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl5-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl5-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl5-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl5-spellrow.sl5-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl5-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl5-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl5-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl5-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl5-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl5-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl5-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl5-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl5-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl5-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl5-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl5-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl5-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl5-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl5-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl5-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl5-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl5-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl5-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl5-card textarea.sl5-knownarea,
|
||
.page-magic .sl5-card textarea.sl5-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl5-card textarea.sl5-knownarea,
|
||
.page-magic .sl5-card textarea.sl5-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl5-card textarea.sl5-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl5-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl5-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl5-card textarea.sl5-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl5-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl5-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl5-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl5-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl5-spellrow-name .sl5-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl5-card, .sl5-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl5-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl5-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl5-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl5-topitem .sl5-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl5-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl5-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl5-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl5-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl5-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl5-spellrow input.sl5-line,
|
||
.sl5-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl5-spellrow-name input.sl5-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl5-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl5-spellbox,
|
||
.sl5-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl5-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl5-spellrow-name .sl5-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl5-spellrow-name .sl5-line.time,
|
||
.sl5-spellrow-name .sl5-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl5-card, .sl5-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl5-card,
|
||
.sl5-spellbox,
|
||
.sl5-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl5-spellrow,
|
||
.sl5-knownrow,
|
||
.sl5-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl5-spellrow input,
|
||
.sl5-spellrow textarea,
|
||
.sl5-knownrow textarea,
|
||
.sl5-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl5-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl5-spellrow-name .sl5-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl5-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl5-spellpair .sl5-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl5-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl5-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl5-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl5-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl5-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl5-spellpair .sl5-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl5-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl5-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl5-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl5-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl5-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl5-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl5-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl5-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl5-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl5-spellpair .sl5-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl5-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl5-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl5-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl5-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl5-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl5-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl5-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl5-spellpair-time,
|
||
.sl5-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl5-spellbox .sl5-spellrow.sl5-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl5-spellbox .sl5-spellrow.sl5-spellrow-name .sl5-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl5-spellbox .sl5-spellrow.sl5-spellrow-name .sl5-spellpair .sl5-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Collapsible Spell Level 6 Card (SL6) ===== */
|
||
.sl6-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl6-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl6-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl6-toggle:checked + .sl6-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl6-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl6-toggle:not(:checked) + .sl6-toggle-btn + .sl6-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL6 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl6-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl6-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl6-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl6-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl6-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl6-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl6-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl6-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl6-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl6-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl6-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl6-spellrow.sl6-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl6-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl6-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl6-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl6-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl6-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl6-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl6-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl6-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl6-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl6-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl6-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl6-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl6-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl6-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl6-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl6-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl6-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl6-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl6-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl6-card textarea.sl6-knownarea,
|
||
.page-magic .sl6-card textarea.sl6-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl6-card textarea.sl6-knownarea,
|
||
.page-magic .sl6-card textarea.sl6-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl6-card textarea.sl6-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl6-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl6-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl6-card textarea.sl6-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl6-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl6-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl6-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl6-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl6-spellrow-name .sl6-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl6-card, .sl6-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl6-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl6-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl6-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl6-topitem .sl6-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl6-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl6-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl6-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl6-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl6-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl6-spellrow input.sl6-line,
|
||
.sl6-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl6-spellrow-name input.sl6-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl6-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl6-spellbox,
|
||
.sl6-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl6-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl6-spellrow-name .sl6-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl6-spellrow-name .sl6-line.time,
|
||
.sl6-spellrow-name .sl6-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl6-card, .sl6-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl6-card,
|
||
.sl6-spellbox,
|
||
.sl6-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl6-spellrow,
|
||
.sl6-knownrow,
|
||
.sl6-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl6-spellrow input,
|
||
.sl6-spellrow textarea,
|
||
.sl6-knownrow textarea,
|
||
.sl6-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl6-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl6-spellrow-name .sl6-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl6-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl6-spellpair .sl6-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl6-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl6-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl6-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl6-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl6-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl6-spellpair .sl6-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl6-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl6-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl6-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl6-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl6-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl6-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl6-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl6-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl6-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl6-spellpair .sl6-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl6-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl6-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl6-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl6-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl6-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl6-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl6-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl6-spellpair-time,
|
||
.sl6-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl6-spellbox .sl6-spellrow.sl6-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl6-spellbox .sl6-spellrow.sl6-spellrow-name .sl6-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl6-spellbox .sl6-spellrow.sl6-spellrow-name .sl6-spellpair .sl6-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Collapsible Spell Level 7 Card (SL7) ===== */
|
||
.sl7-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl7-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl7-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl7-toggle:checked + .sl7-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl7-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl7-toggle:not(:checked) + .sl7-toggle-btn + .sl7-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL7 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl7-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl7-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl7-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl7-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl7-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl7-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl7-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl7-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl7-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl7-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl7-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl7-spellrow.sl7-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl7-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl7-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl7-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl7-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl7-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl7-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl7-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl7-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl7-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl7-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl7-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl7-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl7-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl7-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl7-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl7-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl7-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl7-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl7-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl7-card textarea.sl7-knownarea,
|
||
.page-magic .sl7-card textarea.sl7-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl7-card textarea.sl7-knownarea,
|
||
.page-magic .sl7-card textarea.sl7-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl7-card textarea.sl7-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl7-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl7-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl7-card textarea.sl7-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl7-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl7-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl7-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl7-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl7-spellrow-name .sl7-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl7-card, .sl7-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl7-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl7-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl7-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl7-topitem .sl7-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl7-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl7-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl7-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl7-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl7-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl7-spellrow input.sl7-line,
|
||
.sl7-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl7-spellrow-name input.sl7-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl7-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl7-spellbox,
|
||
.sl7-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl7-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl7-spellrow-name .sl7-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl7-spellrow-name .sl7-line.time,
|
||
.sl7-spellrow-name .sl7-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl7-card, .sl7-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl7-card,
|
||
.sl7-spellbox,
|
||
.sl7-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl7-spellrow,
|
||
.sl7-knownrow,
|
||
.sl7-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl7-spellrow input,
|
||
.sl7-spellrow textarea,
|
||
.sl7-knownrow textarea,
|
||
.sl7-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl7-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl7-spellrow-name .sl7-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl7-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl7-spellpair .sl7-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl7-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl7-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl7-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl7-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl7-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl7-spellpair .sl7-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl7-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl7-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl7-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl7-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl7-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl7-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl7-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl7-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl7-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl7-spellpair .sl7-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl7-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl7-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl7-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl7-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl7-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl7-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl7-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl7-spellpair-time,
|
||
.sl7-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl7-spellbox .sl7-spellrow.sl7-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl7-spellbox .sl7-spellrow.sl7-spellrow-name .sl7-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl7-spellbox .sl7-spellrow.sl7-spellrow-name .sl7-spellpair .sl7-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Collapsible Spell Level 8 Card (SL8) ===== */
|
||
.sl8-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl8-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl8-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl8-toggle:checked + .sl8-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl8-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl8-toggle:not(:checked) + .sl8-toggle-btn + .sl8-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL8 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl8-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl8-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl8-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl8-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl8-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl8-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl8-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl8-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl8-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl8-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl8-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl8-spellrow.sl8-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl8-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl8-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl8-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl8-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl8-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl8-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl8-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl8-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl8-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl8-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl8-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl8-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl8-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl8-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl8-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl8-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl8-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl8-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl8-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl8-card textarea.sl8-knownarea,
|
||
.page-magic .sl8-card textarea.sl8-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl8-card textarea.sl8-knownarea,
|
||
.page-magic .sl8-card textarea.sl8-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl8-card textarea.sl8-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl8-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl8-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl8-card textarea.sl8-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl8-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl8-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl8-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl8-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl8-spellrow-name .sl8-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl8-card, .sl8-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl8-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl8-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl8-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl8-topitem .sl8-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl8-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl8-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl8-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl8-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl8-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl8-spellrow input.sl8-line,
|
||
.sl8-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl8-spellrow-name input.sl8-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl8-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl8-spellbox,
|
||
.sl8-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl8-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl8-spellrow-name .sl8-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl8-spellrow-name .sl8-line.time,
|
||
.sl8-spellrow-name .sl8-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl8-card, .sl8-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl8-card,
|
||
.sl8-spellbox,
|
||
.sl8-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl8-spellrow,
|
||
.sl8-knownrow,
|
||
.sl8-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl8-spellrow input,
|
||
.sl8-spellrow textarea,
|
||
.sl8-knownrow textarea,
|
||
.sl8-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl8-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl8-spellrow-name .sl8-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl8-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl8-spellpair .sl8-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl8-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl8-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl8-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl8-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl8-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl8-spellpair .sl8-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl8-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl8-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl8-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl8-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl8-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl8-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl8-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl8-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl8-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl8-spellpair .sl8-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl8-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl8-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl8-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl8-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl8-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl8-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl8-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl8-spellpair-time,
|
||
.sl8-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl8-spellbox .sl8-spellrow.sl8-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl8-spellbox .sl8-spellrow.sl8-spellrow-name .sl8-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl8-spellbox .sl8-spellrow.sl8-spellrow-name .sl8-spellpair .sl8-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
/* ===== Collapsible Spell Level 9 Card (SL9) ===== */
|
||
.sl9-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.sl9-toggle-btn{
|
||
display: inline-block;
|
||
border: 1px solid #333;
|
||
border-radius: 6px;
|
||
padding: 4px 8px;
|
||
font-size: 11px;
|
||
font-weight: bold;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
margin: 0 0 6px 0;
|
||
background: #fff;
|
||
position: relative;
|
||
top: 1px;
|
||
padding-right: 22px;
|
||
}
|
||
|
||
.sl9-toggle-btn::after{
|
||
content: "◀";
|
||
position: absolute;
|
||
right: 28px;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
color: #000;
|
||
font-size: 12px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.sl9-toggle:checked + .sl9-toggle-btn::after{
|
||
content: "▼";
|
||
color: #000;
|
||
}
|
||
|
||
.sl9-toggle-btn:hover{
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.sl9-toggle:not(:checked) + .sl9-toggle-btn + .sl9-body{
|
||
display: none;
|
||
}
|
||
|
||
/* ===== SL9 structural style mirror (from SL0) ===== */
|
||
|
||
|
||
|
||
/* sheet243: Spell Level 0 (SL0) card (Arial only) */
|
||
.sl9-card{
|
||
position: relative;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 20px 14px 12px 14px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl9-title{
|
||
position: absolute;
|
||
top: -11px;
|
||
left: 10px;
|
||
background: #fff;
|
||
padding: 2px 10px;
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
.sl9-toprow{
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 22px;
|
||
align-items: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
|
||
.sl9-topitem{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl9-box{
|
||
width: 58px;
|
||
height: 30px;
|
||
border: 2px solid #000;
|
||
background: #f2f2f2;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl9-knownrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 12px;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
|
||
.sl9-knownlabel{
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl9-knownline{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl9-sep{
|
||
border-top: 2px solid #000;
|
||
margin: 8px 0 14px 0;
|
||
}
|
||
|
||
|
||
.sl9-spellbox{
|
||
border: 2px solid #000;
|
||
border-radius: 4px;
|
||
padding: 10px 10px 6px 10px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl9-spellrow{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
gap: 10px;
|
||
align-items: center;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
|
||
/* Spell Info: Spell Name row adds Casting Time on the same line */
|
||
.sl9-spellrow.sl9-spellrow-name{
|
||
grid-template-columns: auto 1fr auto 1fr;
|
||
}
|
||
|
||
|
||
.sl9-spelllabel{
|
||
font-weight: 700;
|
||
font-size: 18px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.sl9-line{
|
||
width: 100%;
|
||
border: none;
|
||
border-bottom: 2px solid #000;
|
||
background: transparent;
|
||
height: 22px;
|
||
padding: 0 4px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
.sl9-line.short{
|
||
max-width: 240px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet244: SL0 card border thickness + layout fixes */
|
||
.sl9-card{
|
||
border: 1px solid #777; /* match other cards */
|
||
border-radius: 8px;
|
||
padding: 10px;
|
||
margin-top: 10px;
|
||
box-sizing: border-box;
|
||
position: static;
|
||
}
|
||
|
||
|
||
/* Remove the prior floating title styling if still present */
|
||
.sl9-title{ display: none; }
|
||
|
||
|
||
/* Force top row to stay on one line */
|
||
.sl9-toprow{
|
||
flex-wrap: nowrap;
|
||
justify-content: space-between;
|
||
gap: 12px;
|
||
}
|
||
|
||
|
||
/* Reduce the three small boxes by ~65% (58px -> ~20px) */
|
||
.sl9-box{
|
||
width: 20px;
|
||
height: 26px;
|
||
}
|
||
|
||
|
||
/* Resizable Spells Known box */
|
||
.sl9-knownarea{
|
||
width: 100%;
|
||
min-height: 28px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Resizable Spell Description box */
|
||
.sl9-descarea{
|
||
width: 100%;
|
||
min-height: 32px;
|
||
border: 1px solid #777;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
padding: 4px 6px;
|
||
resize: vertical;
|
||
box-sizing: border-box;
|
||
font: inherit;
|
||
}
|
||
|
||
|
||
/* Keep Spell Name line as underline but align nicely with textarea below */
|
||
.sl9-spellrow{
|
||
align-items: start;
|
||
}
|
||
|
||
|
||
|
||
/* sheet245: refine SL0 borders + field default heights + label sizing */
|
||
|
||
/* match normal thin borders for separator and spell entry box */
|
||
.sl9-sep{
|
||
border-top: 1px solid #777;
|
||
}
|
||
|
||
|
||
.sl9-spellbox{
|
||
border: 1px solid #777;
|
||
}
|
||
|
||
|
||
/* default (collapsed) heights before user expands */
|
||
.sl9-knownarea{
|
||
min-height: 25px;
|
||
height: 25px;
|
||
}
|
||
|
||
|
||
.sl9-descarea{
|
||
min-height: 20px;
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
/* Spell Name / Spell Description label font size -2px */
|
||
.sl9-spelllabel{
|
||
font-size: 16px;
|
||
}
|
||
|
||
|
||
/* Adjust associated inputs to visually match the smaller labels */
|
||
.sl9-line{
|
||
height: 20px;
|
||
}
|
||
|
||
|
||
.sl9-line.short{
|
||
max-width: 210px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet246: enforce max collapsed height for SL0 textareas */
|
||
.sl9-knownarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
.sl9-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet248: allow user resize to change height (do NOT lock height with !important) */
|
||
.page-magic .sl9-card textarea.sl9-knownarea,
|
||
.page-magic .sl9-card textarea.sl9-descarea{
|
||
height: 20px; /* initial visible height */
|
||
min-padding: 0 4px !important;
|
||
line-height: 18px !important;
|
||
box-sizing: border-box !important;
|
||
resize: vertical !important;
|
||
}
|
||
|
||
|
||
|
||
/* sheet249: SL0 textareas start at 20px but remain user-resizable */
|
||
.page-magic .sl9-card textarea.sl9-knownarea,
|
||
.page-magic .sl9-card textarea.sl9-descarea{
|
||
height: 20px;
|
||
min-height: 20px;
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet251: SL0 card - Spells Known min-height +5px */
|
||
.page-magic .sl9-card textarea.sl9-knownarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* sheet251: match SL0 card min-width to Spellcasting Information card (magic-card) */
|
||
.page-magic .sl9-card{
|
||
min-width: 335px;
|
||
}
|
||
|
||
|
||
/* sheet251: prevent SL0 top-row small boxes from compressing under 25px */
|
||
.page-magic .sl9-box{
|
||
min-width: 25px;
|
||
}
|
||
|
||
|
||
|
||
/* sheet252: SL0 Spell Description height matches Spells Known */
|
||
.page-magic .sl9-card textarea.sl9-descarea{
|
||
min-height: 25px;
|
||
}
|
||
|
||
|
||
/* Match SL0 textarea initial height/resizing behavior inside Spell Info */
|
||
.page-magic .spellinfo-card textarea.sl9-descarea{
|
||
height: 20px;
|
||
min-height: 25px; /* match SL0 Spell Description min-height (sheet252) */
|
||
resize: vertical;
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* sheet260: SL0 Spell Info repeating section (+Add) */
|
||
.page-magic .sl9-spellinfo-repeat-note{
|
||
margin-top: 6px;
|
||
margin-bottom: 6px;
|
||
font-size: 11px;
|
||
line-height: 1.2;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
|
||
.page-magic .sl9-addhint{
|
||
font-weight: 700;
|
||
}
|
||
|
||
|
||
/* Slight separation between repeating Spell Info entries */
|
||
.page-magic .sl9-spellbox-repeat{
|
||
margin-top: 6px;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – minimum width for Spell Name and Casting Time */
|
||
.sl9-spellrow-name .sl9-line.short {
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Responsive containment fixes
|
||
Spell Level 0 + Spell Info
|
||
========================= */
|
||
|
||
/* Ensure all SL0 elements size within their containers */
|
||
.sl9-card, .sl9-card * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* Prevent any child content from visually spilling out of the card */
|
||
.sl9-card {
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* Allow top-row items to wrap inside the card instead of overflowing */
|
||
.sl9-toprow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
/* Make each top item flexible and allow it to shrink within the card */
|
||
.sl9-topitem {
|
||
flex: 1 1 240px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep the little number boxes from forcing overflow */
|
||
.sl9-topitem .sl9-box {
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spells Known row: allow textarea to shrink/wrap within card */
|
||
.sl9-knownrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
|
||
.sl9-knownlabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl9-knownarea {
|
||
flex: 1 1 260px;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Info rows: wrap on narrow screens, keep fields inside */
|
||
.sl9-spellrow {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px 10px;
|
||
align-items: center;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl9-spelllabel {
|
||
flex: 0 0 auto;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Inputs should be allowed to shrink instead of overflowing */
|
||
.sl9-spellrow input.sl9-line,
|
||
.sl9-spellrow textarea {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Spell Name + Casting Time line: make inputs share space and wrap cleanly */
|
||
.sl9-spellrow-name input.sl9-line.short {
|
||
flex: 1 1 240px; /* grows, shrinks, wraps */
|
||
min-width: 60px; /* your requested minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Description textarea should always stay within the card */
|
||
.sl9-descarea {
|
||
flex: 1 1 100%;
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Repeat spell boxes should also clip/wrap properly */
|
||
.sl9-spellbox,
|
||
.sl9-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – lock Name / Casting Time / Range on one row with proportional widths */
|
||
.sl9-spellrow-name {
|
||
display: flex;
|
||
flex-wrap: nowrap; /* stay on one row */
|
||
align-items: center;
|
||
}
|
||
|
||
|
||
.sl9-spellrow-name .sl9-line.name {
|
||
flex: 3 1 0; /* 50% wider */
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
.sl9-spellrow-name .sl9-line.time,
|
||
.sl9-spellrow-name .sl9-line.range {
|
||
flex: 2 1 0;
|
||
min-width: 60px;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* =========================
|
||
Spell Info containment (responsive)
|
||
Keeps content inside Spell Info card on narrow widths
|
||
========================= */
|
||
.sl9-card, .sl9-card * { box-sizing: border-box; }
|
||
|
||
|
||
.sl9-card,
|
||
.sl9-spellbox,
|
||
.sl9-spellbox-repeat {
|
||
max-width: 100%;
|
||
overflow: hidden; /* prevent spill outside card */
|
||
}
|
||
|
||
|
||
.sl9-spellrow,
|
||
.sl9-knownrow,
|
||
.sl9-toprow {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
.sl9-spellrow input,
|
||
.sl9-spellrow textarea,
|
||
.sl9-knownrow textarea,
|
||
.sl9-toprow input {
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Default: keep Name/Time/Range inputs on one row (your preferred layout) */
|
||
.sl9-spellrow-name { flex-wrap: nowrap; }
|
||
|
||
.sl9-spellrow-name .sl9-spelllabel { white-space: nowrap; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – keep each label+field together as a unit */
|
||
.sl9-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* prevents label and its input from splitting lines */
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Ensure inputs inside pairs can still shrink within the card */
|
||
.sl9-spellpair .sl9-line{
|
||
min-width: 60px; /* your minimum */
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
/* Spell Info – keep each label with its field, and preserve 3:2:2 width distribution */
|
||
.sl9-spellrow-name{
|
||
display:flex;
|
||
gap: 6px 10px;
|
||
align-items:center;
|
||
max-width:100%;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Each label+input pair stays together */
|
||
.sl9-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
white-space:nowrap;
|
||
min-width:0;
|
||
}
|
||
|
||
|
||
/* Proportional widths (Spell Name 50% wider than Time/Range) */
|
||
.sl9-spellpair.pair-name{ flex:3 1 0; }
|
||
|
||
.sl9-spellpair.pair-time{ flex:2 1 0; }
|
||
|
||
.sl9-spellpair.pair-range{ flex:2 1 0; }
|
||
|
||
|
||
/* Inputs shrink inside their pair; keep your minimum */
|
||
.sl9-spellpair .sl9-line{
|
||
flex:1 1 0;
|
||
min-width:60px;
|
||
max-width:100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* Spell Info – final overrides for pair classes used in HTML */
|
||
.sl9-spellrow-name{ flex-wrap: wrap; }
|
||
|
||
.sl9-spellpair.namepair{ flex: 3 1 0; }
|
||
|
||
.sl9-spellpair.timepair{ flex: 2 1 0; }
|
||
|
||
.sl9-spellpair.rangepair{ flex: 2 1 0; }
|
||
|
||
|
||
|
||
|
||
/* Spell Info – wrap by label+field pair (Casting Time & Range may drop, but never split from their label) */
|
||
.sl9-spellrow-name{
|
||
display:flex;
|
||
flex-wrap: wrap; /* allow pairs to wrap to lower rows */
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
.sl9-spellpair{
|
||
display:flex;
|
||
align-items:center;
|
||
gap: 6px;
|
||
white-space: nowrap; /* label and its field stay on same line */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Proportional widths by PAIR so the whole unit wraps together */
|
||
.sl9-spellpair-name{ flex: 3 1 0; }
|
||
|
||
.sl9-spellpair-time{ flex: 2 1 0; }
|
||
|
||
.sl9-spellpair-range{ flex: 2 1 0; }
|
||
|
||
|
||
/* Inputs inside pairs can shrink but respect your minimum */
|
||
.sl9-spellpair .sl9-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX: actually allow Casting Time / Range PAIRS to wrap when narrow */
|
||
.sl9-spellrow-name{
|
||
flex-wrap: wrap !important;
|
||
}
|
||
|
||
|
||
/* Prevent pairs from shrinking to avoid suppressing wrapping */
|
||
.sl9-spellpair{
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
|
||
|
||
|
||
/* FIX v2: enforce wrapping by giving each label+field pair a real minimum width.
|
||
This makes Casting Time / Range drop to a new row when the window is narrow,
|
||
while keeping each label attached to its field. */
|
||
.sl9-spellrow-name{
|
||
width: 100%;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Minimum widths are set to the pair (label+field), not just the input,
|
||
so pairs stop compressing and instead wrap. */
|
||
.sl9-spellpair-name{ min-width: 320px; }
|
||
|
||
.sl9-spellpair-time{ min-width: 220px; }
|
||
|
||
.sl9-spellpair-range{ min-width: 200px; }
|
||
|
||
|
||
/* Keep 50% wider intent while still permitting wrap by pair */
|
||
.sl9-spellpair-name{ flex: 3 0 auto; }
|
||
|
||
.sl9-spellpair-time,
|
||
.sl9-spellpair-range{ flex: 2 0 auto; }
|
||
|
||
|
||
|
||
|
||
/* ===== Spell Info wrap fix (authoritative) =====
|
||
Problem: earlier rules target non-existent classes (sl0-spellpair-time/range),
|
||
and older grid/flex rules conflict. These rules are appended LAST and use
|
||
high specificity/!important so the Spell Info row actually wraps by pair. */
|
||
|
||
/* Ensure the Spell Name row is flex (not grid) and can wrap */
|
||
.sl9-spellbox .sl9-spellrow.sl9-spellrow-name{
|
||
display: flex !important;
|
||
flex-wrap: wrap !important;
|
||
align-items: center;
|
||
gap: 6px 10px;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
min-width: 0;
|
||
}
|
||
|
||
|
||
/* Keep each label+field together */
|
||
.sl9-spellbox .sl9-spellrow.sl9-spellrow-name .sl9-spellpair{
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
white-space: nowrap;
|
||
flex-shrink: 0; /* don't compress forever; wrap instead */
|
||
min-width: 0;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* Inputs still respect your minimum and stay within the card */
|
||
.sl9-spellbox .sl9-spellrow.sl9-spellrow-name .sl9-spellpair .sl9-line{
|
||
min-width: 60px;
|
||
max-width: 100%;
|
||
}
|
||
|
||
|
||
/* === Sheet280: Calculated vs User-Entered Field Coloring === */
|
||
/* Calculated / auto-filled fields (readonly) */
|
||
.sheet-roll20 input[readonly],
|
||
.sheet-roll20 textarea[readonly] {
|
||
color: #4a4a4a; /* dark grey */
|
||
}
|
||
|
||
/* User-entered fields */
|
||
.sheet-roll20 input:not([readonly]),
|
||
.sheet-roll20 textarea:not([readonly]) {
|
||
color: #0b1f3a; /* dark navy blue */
|
||
}
|
||
|
||
/* === Sheet281: Correct selector for this sheet (.lfg-sheet) === */
|
||
/* Calculated / auto-filled fields (readonly) */
|
||
.lfg-sheet input[readonly],
|
||
.lfg-sheet textarea[readonly] {
|
||
color: #4a4a4a !important; /* dark grey */
|
||
}
|
||
|
||
/* User-entered fields */
|
||
.lfg-sheet input:not([readonly]),
|
||
.lfg-sheet textarea:not([readonly]) {
|
||
color: #0b1f3a !important; /* dark navy blue */
|
||
}
|
||
|
||
|
||
/* === Sheet292: Weapons & Attacks - Attack Roll button === */
|
||
.weapons-card-full .wt-head.wt-attackbonus {
|
||
position: relative;
|
||
}
|
||
|
||
/* Place the button inside the same square under the Attack Bonus field without resizing the cell */
|
||
.weapons-card-full .wt-attackroll-btn {
|
||
position: absolute;
|
||
left: 4px;
|
||
right: 4px;
|
||
bottom: 3px;
|
||
height: 16px;
|
||
line-height: 14px;
|
||
font-size: 10px;
|
||
padding: 0;
|
||
border-radius: 3px;
|
||
}
|
||
|
||
/* remove d20 icon / normalize save roll button */
|
||
/* Clean save button styling that RETAINS the Roll20 dice icon */
|
||
.save-roll-btn{
|
||
border: 1px solid rgba(0,0,0,0.55);
|
||
border-radius: 3px;
|
||
padding: 0 4px 0 18px;
|
||
margin-left: -10px;
|
||
display: inline-block;
|
||
height: 16px;
|
||
line-height: 14px;
|
||
font-size: 10px;
|
||
font-weight: 700;
|
||
position: relative;
|
||
left: -10px;
|
||
white-space: nowrap;
|
||
box-sizing: border-box;
|
||
min-width: 54px;
|
||
|
||
/* keep Roll20 dice icon */
|
||
background-size: 14px 14px;
|
||
background-position: 3px center;
|
||
background-repeat: no-repeat;
|
||
}
|
||
|
||
.save-roll-btn:hover{
|
||
opacity: 0.92;
|
||
}
|
||
|
||
/* Slightly tighten separator spacing in Saves */
|
||
.save-plus,
|
||
.save-eq{
|
||
margin-left: 2px;
|
||
margin-right: 2px;
|
||
}
|
||
|
||
/* === Sheet307: Save buttons positioned to card edge and widened === */
|
||
/* Shift the entire Saves header + rows left so labels sit ~3px from the card edge
|
||
(armor-saves-card has 12px left padding, so -9px => 3px effective inset) */
|
||
.saving-header,
|
||
.save-row{
|
||
margin-left: -9px;
|
||
}
|
||
|
||
/* Keep dice icon, make the button fit its widened first column */
|
||
.save-roll-btn{
|
||
height: 24px;
|
||
line-height: 22px;
|
||
font-size: 11px;
|
||
font-weight: 700;
|
||
|
||
/* keep Roll20 dice icon */
|
||
background-size: 14px 14px;
|
||
background-position: 3px center;
|
||
|
||
padding-left: 20px;
|
||
padding-right: 6px;
|
||
|
||
border: 1px solid rgba(0,0,0,0.7);
|
||
border-radius: 3px;
|
||
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
white-space: nowrap;
|
||
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: flex-start;
|
||
}
|
||
|
||
|
||
/* === Sheet308: Saving Throws grid shifted & save buttons widened === */
|
||
|
||
/* Shift the entire Saving Throws header and rows left so first column is 3px from card edge */
|
||
.saving-header,
|
||
.save-row {
|
||
margin-left: -9px; /* 12px card padding minus 3px desired inset */
|
||
}
|
||
|
||
/* Expand Save buttons by 15px */
|
||
.save-roll-btn {
|
||
width: calc(100% + 15px);
|
||
}
|
||
|
||
|
||
/* === Sheet309: Save button + column refinements === */
|
||
|
||
/* 1) Increase Save button width by additional 5px (total +20px from base) */
|
||
.save-roll-btn {
|
||
width: calc(100% + 20px);
|
||
}
|
||
|
||
/* 2) Move Total Save column 15px to the right WITHOUT expanding card width
|
||
Achieved by shifting the Total Save column itself */
|
||
.save-row .save-total,
|
||
.saving-header .save-total {
|
||
margin-left: 15px;
|
||
}
|
||
|
||
/* 3) Reduce width of each save fillable field by 3px
|
||
and shift right by the same amount to preserve spacing */
|
||
.save-row input[type="text"],
|
||
.save-row input[type="number"] {
|
||
width: calc(100% - 3px);
|
||
margin-left: 3px;
|
||
}
|
||
|
||
|
||
/* === Sheet310: Compress AC & Saves field spacing by 20% === */
|
||
|
||
/* Compress spacing between save-related columns evenly */
|
||
.saving-header,
|
||
.save-row {
|
||
column-gap: 8px; /* was effectively ~10px, now ~20% tighter */
|
||
}
|
||
|
||
/* Slightly reduce internal padding of save input fields */
|
||
.save-row input[type="text"],
|
||
.save-row input[type="number"] {
|
||
padding-left: 3px;
|
||
padding-right: 3px;
|
||
}
|
||
|
||
/* Ensure columns distribute evenly after compression */
|
||
.saving-header,
|
||
.save-row {
|
||
justify-content: space-between;
|
||
}
|
||
|
||
|
||
/* === Sheet311: Compressed save field spacing (separators and gaps) === */
|
||
|
||
|
||
/* === Sheet312: Total Save column shifted right 15px, width redistributed === */
|
||
|
||
|
||
/* === Sheet313: Saving Throws columns compressed 50%, Total Save shifted right === */
|
||
|
||
|
||
/* The sheet had multiple .save-row blocks; this scoped rule ensures the intended layout wins in Roll20. */
|
||
.armor-saves-card .saving-header {
|
||
grid-template-columns: 96px 37px 15px 37px 2px 37px 2px 40px !important;
|
||
column-gap: 3px !important; /* ~50% tighter than prior 6px */
|
||
}
|
||
|
||
.armor-saves-card .save-row {
|
||
grid-template-columns: 111px 37px 15px 37px 2px 37px 2px 40px !important; /* Total Save shifted right by widening button col */
|
||
column-gap: 3px !important; /* ~50% tighter */
|
||
}
|
||
|
||
|
||
/* === Sheet315: Fix Save button size + even symbol spacing (no card width increase) === */
|
||
/* Scoped overrides so they win over earlier duplicate .save-row rules */
|
||
.armor-saves-card .saving-header {
|
||
/* Button col widened (+15) to push Total Save right; other value cols reduced (-5 each) to keep total width stable */
|
||
grid-template-columns: 96px 37px 12px 32px 12px 32px 12px 32px !important;
|
||
column-gap: 3px !important;
|
||
align-items: center !important;
|
||
}
|
||
|
||
.armor-saves-card .save-row {
|
||
grid-template-columns: 111px 37px 12px 32px 12px 32px 12px 32px !important;
|
||
column-gap: 3px !important;
|
||
align-items: center !important;
|
||
}
|
||
|
||
/* Keep FORT/REF/WILL buttons compact (don’t stretch to fill widened column) */
|
||
.armor-saves-card .save-roll-btn {
|
||
width: 58px !important; /* fits FORT/REF/WILL + icon */
|
||
max-width: 58px !important;
|
||
box-sizing: border-box !important;
|
||
margin: 0 !important;
|
||
justify-self: start !important;
|
||
}
|
||
|
||
/* Center the + and = symbols evenly in their spacer columns */
|
||
.armor-saves-card .save-plus,
|
||
.armor-saves-card .save-eq {
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
justify-content: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet316: Wider Save buttons (+25px) and header/row realignment === */
|
||
|
||
/* Header and rows MUST share identical grid math */
|
||
.armor-saves-card .saving-header,
|
||
.armor-saves-card .save-row {
|
||
grid-template-columns: 121px 36px 12px 36px 12px 36px 12px 36px !important;
|
||
column-gap: 3px !important;
|
||
align-items: center !important;
|
||
}
|
||
|
||
/* Save buttons widened by +25px, but do not stretch */
|
||
.armor-saves-card .save-roll-btn {
|
||
width: 83px !important;
|
||
max-width: 83px !important;
|
||
box-sizing: border-box !important;
|
||
justify-self: start !important;
|
||
}
|
||
|
||
/* Center + and = symbols perfectly */
|
||
.armor-saves-card .save-plus,
|
||
.armor-saves-card .save-eq {
|
||
display: flex !important;
|
||
align-items: center !important;
|
||
justify-content: center !important;
|
||
}\n\n
|
||
/* === Sheet317: Fine positional tweaks for Saving Throws === */
|
||
|
||
/* Shift all save input fields 3px to the left */
|
||
.armor-saves-card .save-row input[type="text"],
|
||
.armor-saves-card .save-row input[type="number"] {
|
||
margin-left: -3px !important;
|
||
}
|
||
|
||
/* Move the three save buttons 10px to the right */
|
||
.armor-saves-card .save-roll-btn {
|
||
margin-left: 10px !important;
|
||
}
|
||
|
||
|
||
/* === Sheet318: Core Stats field width adjustments === */
|
||
|
||
/* Hit Rating field: reduce width by ~55% and keep centered */
|
||
.core-stats-card .hit-rating input[type="text"],
|
||
.core-stats-card .hit-rating input[type="number"] {
|
||
width: 45% !important; /* 100% - 55% */
|
||
margin-left: auto !important;
|
||
margin-right: auto !important;
|
||
display: block;
|
||
}
|
||
|
||
/* Ability Mod fields: reduce width by ~40% and keep centered under header */
|
||
.core-stats-card .ability-mod input[type="text"],
|
||
.core-stats-card .ability-mod input[type="number"] {
|
||
width: 60% !important; /* 100% - 40% */
|
||
margin-left: auto !important;
|
||
margin-right: auto !important;
|
||
display: block;
|
||
}
|
||
|
||
|
||
/* === Sheet319: Core Stats width tweaks (Hit Rating + Ability Mod) === */
|
||
.core-stats-card .corestat-row.hr-row {
|
||
grid-template-columns: 1fr 39px;
|
||
}
|
||
.core-stats-card .corestat-row.hr-row .corestat-box {
|
||
width: 39px !important;
|
||
}
|
||
|
||
|
||
/* === Sheet320: Core Stats Ability Mod fields width -40% and centered === */
|
||
/* Force header+rows to keep the Ability Mod column aligned */
|
||
.core-stats-card .ability-header,
|
||
.core-stats-card .ability-row{
|
||
grid-template-columns: 70px 1fr 1fr !important; /* keep column structure stable */
|
||
}
|
||
|
||
/* Reduce ONLY the Ability Mod input boxes by 40% (i.e., to 60% width) and center them */
|
||
.core-stats-card .ability-row input.ability-box[readonly]{
|
||
width: 60% !important;
|
||
justify-self: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet321: Core Stats Ability Mod boxes truly -40% width and centered === */
|
||
/* Target ONLY the Ability Mod (readonly) boxes in the ability grid and override fixed width rules */
|
||
.core-stats-card .ability-row input.ability-box[readonly]{
|
||
width: 43px !important;
|
||
min-width: 43px !important;
|
||
max-width: 43px !important;
|
||
justify-self: center !important;
|
||
display: block !important;
|
||
margin-left: auto !important;
|
||
margin-right: auto !important;
|
||
}
|
||
|
||
|
||
/* === Sheet322: AC & Saves – Total Save fields +5px width, centered === */
|
||
/* Increase only the Total Save calculated fields without changing grid or card width */
|
||
.armor-saves-card .save-row input.total-save,
|
||
.armor-saves-card .save-row input[name^="attr_TotalSave"]{
|
||
width: calc(100% + 5px) !important;
|
||
max-width: calc(100% + 5px) !important;
|
||
justify-self: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet323: AC & Saves – Total Save column +5px, redistributed (no card width change) === */
|
||
/* Strong, scoped overrides to avoid collisions with earlier .save-row blocks */
|
||
.armor-saves-card .saving-header {
|
||
grid-template-columns: 81px 42px 29px 35px 4px 35px 4px 36px !important;
|
||
align-items: center !important;
|
||
}
|
||
.armor-saves-card .save-row {
|
||
grid-template-columns: 96px 42px 29px 35px 4px 35px 4px 36px !important;
|
||
align-items: center !important;
|
||
}
|
||
|
||
/* Ensure Total Save input stays centered under its header */
|
||
.armor-saves-card .save-cell {
|
||
display: flex !important;
|
||
justify-content: center !important;
|
||
align-items: center !important;
|
||
}
|
||
.armor-saves-card input.save-box.save-total {
|
||
width: 100% !important;
|
||
}
|
||
|
||
|
||
/* === Sheet324: Re-align Saving Throws headers above their columns (no field movement) === */
|
||
/* Match header grid math to the save-row grid so labels sit directly above inputs. */
|
||
.armor-saves-card .saving-header {
|
||
grid-template-columns: 96px 37px 29px 37px 4px 37px 4px 37px !important;
|
||
column-gap: 6px !important;
|
||
align-items: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet325: Nudge Saving Throws input fields 3px left (no card width change) === */
|
||
/* Apply only to inputs, not headers or grid */
|
||
.armor-saves-card .save-row input[type="text"],
|
||
.armor-saves-card .save-row input[type="number"] {
|
||
position: relative !important;
|
||
left: -3px !important;
|
||
}
|
||
|
||
|
||
/* === Sheet328: Equip Slots – TOTAL EQUIPPED WEIGHT width -20% and right-aligned (no layout changes) === */
|
||
.equip-slots input.equip-total-weight{
|
||
width: 64px !important; /* 80px * 0.8 */
|
||
min-width: 64px !important;
|
||
max-width: 64px !important;
|
||
display: block !important;
|
||
margin-left: auto !important; /* right align inside its grid cell */
|
||
margin-right: 0 !important;
|
||
}
|
||
|
||
|
||
/* === Sheet330: Keep TOTAL EQUIPPED WEIGHT on one horizontal line === */
|
||
.equip-slots .equip-row.equip-total-row .equip-label{
|
||
white-space: nowrap !important;
|
||
}
|
||
|
||
|
||
/* === Sheet331: TOTAL EQUIPPED WEIGHT label spans row to prevent stacking === */
|
||
.equip-slots .equip-row.equip-total-row .equip-label{
|
||
white-space: nowrap !important;
|
||
grid-column: 1 / span 2 !important;
|
||
}
|
||
|
||
.equip-slots .equip-row.equip-total-row .equip-total-weight{
|
||
grid-column: 3 !important;
|
||
}
|
||
|
||
|
||
/* === Sheet333: TOTAL EQUIPPED WEIGHT label and field on same row === */
|
||
/* Let the label span columns 1-2, and force the weight field into column 3 */
|
||
.equip-slots .equip-row.equip-total-row .equip-label{
|
||
white-space: nowrap !important;
|
||
grid-column: 1 / 3 !important; /* span label across label+item columns */
|
||
}
|
||
|
||
.equip-slots .equip-row.equip-total-row input.equip-total-weight{
|
||
grid-column: 3 !important; /* keep aligned with Weight column */
|
||
margin-left: auto !important; /* right-align within the weight cell */
|
||
}
|
||
|
||
|
||
/* === Sheet335: Center-align specified fields (Back tab Weights, Skills card, Gold GP) === */
|
||
|
||
/* Back tab: center-align ALL Weight-related fields (Wt column + totals) */
|
||
.page-back input[placeholder="Wt"],
|
||
.page-back input[placeholder*="WEIGHT"],
|
||
.page-back input.equip-total-weight,
|
||
.page-back input.backpack-total-weight{
|
||
text-align: center !important;
|
||
}
|
||
|
||
/* Skills card: center-align all fillable fields */
|
||
.skills-card input[type="text"],
|
||
.skills-card input[type="number"]{
|
||
text-align: center !important;
|
||
}
|
||
|
||
/* Gold (GP) field */
|
||
input[name="attr_Gold"]{
|
||
text-align: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet337: Center-align Sheaths & Bandoliers weight fields === */
|
||
.subcard.sheaths-bandoliers input[placeholder^="Wt"]{
|
||
text-align: center !important;
|
||
}
|
||
.repeating_sheathsbandoliers input[placeholder^="Wt"]{
|
||
text-align: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet338: Center-align Belt Pouches weight fields === */
|
||
.subcard.belt-pouches input[placeholder^="Wt"]{
|
||
text-align: center !important;
|
||
}
|
||
.repeating_beltpouches input[placeholder^="Wt"]{
|
||
text-align: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet339: Standardize total weight field widths + center totals (no card size changes) === */
|
||
/* Baseline is Total Equipped Weight width: 64px */
|
||
|
||
/* Match total weight fields to baseline width and keep right-aligned in their weight column */
|
||
.page-back input.backpack-total-weight,
|
||
.page-back input.sheath-total-weight,
|
||
.page-back input.pouch-total-weight{
|
||
width: 64px !important;
|
||
min-width: 64px !important;
|
||
max-width: 64px !important;
|
||
display: block !important;
|
||
margin-left: auto !important;
|
||
margin-right: 0 !important;
|
||
}
|
||
|
||
/* Center-align the numeric value inside total fields (Sheaths & Belt Pouches) */
|
||
.page-back input.sheath-total-weight,
|
||
.page-back input.pouch-total-weight{
|
||
text-align: center !important;
|
||
}
|
||
|
||
|
||
/* === Sheet343: Backpack TOTAL BACKPACK WEIGHT visible label on same row (no card size changes) === */
|
||
.backpack-total-row{
|
||
display: grid !important;
|
||
grid-template-columns: 1fr auto !important;
|
||
align-items: center !important;
|
||
column-gap: 6px !important;
|
||
}
|
||
|
||
.backpack-total-row .backpack-total-label{
|
||
white-space: nowrap !important;
|
||
}
|
||
|
||
/* keep the total field aligned with the weight column/right edge */
|
||
.backpack-total-row input.backpack-total-weight{
|
||
justify-self: end !important;
|
||
}
|
||
|
||
.sheath-total-label{
|
||
font-weight: bold;
|
||
font-size: 0.8em;
|
||
padding-right: 6px;
|
||
}
|
||
|
||
/* sheet345: Sheaths & Bandoliers total row label + field on same line without impacting other cards */
|
||
.sheath-total-row{
|
||
display: grid;
|
||
grid-template-columns: auto 1fr;
|
||
align-items: center;
|
||
}
|
||
.sheath-total-row input{
|
||
width: 100%;
|
||
min-width: 0;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/* sheet345: Belt Pouches total row label (keeps total field aligned under weight column) */
|
||
.pouch-total-label{
|
||
font-weight: bold;
|
||
font-size: 0.8em;
|
||
text-align: right;
|
||
padding-right: 6px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* sheet346: Belt Pouches total row label (aligns with Pouch Item fields) */
|
||
.belt-pouches .pouch-total-label{
|
||
font-weight: bold;
|
||
font-size: 0.8em;
|
||
text-align: left;
|
||
white-space: nowrap;
|
||
justify-self: start;
|
||
padding-right: 0;
|
||
}
|
||
|
||
/* sheet346 override: ensure left alignment wins */
|
||
.belt-pouches .pouch-total-label{ text-align: left; padding-right: 0; justify-self: start; }
|
||
|
||
/* sheet347: ensure label aligns with Pouch Item fields */
|
||
.belt-pouches .pouch-total-label{
|
||
text-align: left;
|
||
justify-self: start;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* sheet348: tighten visual alignment of TOTAL POUCH WEIGHT with Pouch Item fields */
|
||
.belt-pouches .pouch-total-label{
|
||
padding-left: 0;
|
||
}
|
||
|
||
/* sheet349: Belt Pouches - right-align Total Pouch Weight field with Wt inputs */
|
||
.belt-pouches .pouch-total-row input.pouch-total-weight{
|
||
width: 45px;
|
||
min-width: 45px;
|
||
box-sizing: border-box;
|
||
justify-self: end;
|
||
}
|
||
|
||
/* sheet350: Belt Pouches - make Total Pouch Weight field match Wt input width & alignment */
|
||
.page-back .belt-pouches input.pouch-total-weight{
|
||
width: 45px !important;
|
||
min-width: 45px !important;
|
||
max-width: 45px !important;
|
||
margin-left: 0 !important;
|
||
margin-right: 0 !important;
|
||
justify-self: stretch;
|
||
}
|
||
|
||
/* sheet357: Modified Light Load label styling */
|
||
.cap-grid-label.mod-light{
|
||
font-size: 0.85em;
|
||
font-style: italic;
|
||
}
|
||
|
||
|
||
/* sheet359: header line title + logo (inline, no layout disruption) */
|
||
.lfg-sheet-titlebar{
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
margin: 0 0 6px 0;
|
||
padding: 0;
|
||
}
|
||
.lfg-sheet-title{
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
line-height: 1.2;
|
||
}
|
||
.lfg-sheet-logo{
|
||
height: 18px;
|
||
width: auto;
|
||
opacity: 0.9;
|
||
pointer-events: none;
|
||
display: block;
|
||
}
|
||
|
||
|
||
|
||
/* sheet362: header logo size adjustment */
|
||
.lfg-sheet-logo{
|
||
width: 300px;
|
||
height: auto;
|
||
}
|
||
|
||
/* sheet363: align logo under main title and remove duplicate title */
|
||
.lfg-sheet-titlebar{
|
||
justify-content: flex-start;
|
||
}
|
||
|
||
/* sheet364: Option B - logo only (remove header text) */
|
||
.lfg-sheet-title{ display: none !important; }
|
||
.lfg-sheet-titlebar{ justify-content: flex-start; }
|
||
|
||
|
||
/* sheet370: Initiative card (Front tab) */
|
||
.initiative-card{
|
||
padding-top: 5px;
|
||
padding-bottom: 5px;
|
||
}
|
||
|
||
/* Anchor for absolute-positioned toggle button without shifting existing elements */
|
||
.initiative-card .initiative-row{
|
||
position: relative;
|
||
}
|
||
|
||
.initiative-card .init-ready-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
.initiative-card .init-ready-btn{
|
||
position: absolute;
|
||
right: 5px;
|
||
top: 0;
|
||
|
||
width: 95px;
|
||
height: 22px;
|
||
border: 1px solid #999;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
font-weight: bold;
|
||
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
text-align: center;
|
||
box-sizing: border-box;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.initiative-card .init-ready-btn::after{
|
||
content: "I'M READY";
|
||
color: #1a8f2a;
|
||
}
|
||
|
||
.initiative-card .init-ready-toggle:checked + .init-ready-btn::after{
|
||
content: "I'M DONE";
|
||
color: #b11a1a;
|
||
}
|
||
|
||
/* sheet371: Initiative button without moving label/input styles */
|
||
.initiative-card .initiative-row{
|
||
display: flex;
|
||
align-items: flex-start; /* align to top of initiative field */
|
||
flex-wrap: nowrap;
|
||
gap: 8px;
|
||
}
|
||
|
||
/* hide checkbox but keep it functional */
|
||
.initiative-card .init-ready-toggle{
|
||
position: absolute;
|
||
left: -9999px;
|
||
}
|
||
|
||
/* button sits immediately to the right of the initiative field (no overlap) */
|
||
.initiative-card .init-ready-btn{
|
||
width: 110px;
|
||
height: 22px;
|
||
border: 1px solid #999;
|
||
border-radius: 4px;
|
||
background: #fff;
|
||
cursor: pointer;
|
||
user-select: none;
|
||
font-weight: bold;
|
||
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
text-align: center;
|
||
|
||
box-sizing: border-box;
|
||
white-space: nowrap; /* always one line */
|
||
line-height: 22px;
|
||
}
|
||
|
||
/* Default state */
|
||
.initiative-card .init-ready-btn::after{
|
||
content: "I'M READY";
|
||
color: #1a8f2a;
|
||
}
|
||
|
||
/* Toggled state */
|
||
.initiative-card .init-ready-toggle:checked + .init-ready-btn::after{
|
||
content: "I'M DONE";
|
||
color: #b11a1a;
|
||
}
|
||
|
||
/* sheet372: nudge initiative formula down to avoid overlap */
|
||
.initiative-card .initiative-formula{
|
||
margin-top: 7px;
|
||
}
|
||
|
||
/* sheet379: Initiative reactions line (absolute, no layout impact) */
|
||
.initiative-card{
|
||
position: relative;
|
||
}
|
||
|
||
.initiative-card .initiative-reactions{
|
||
position: absolute;
|
||
right: 0;
|
||
top: 32px;
|
||
display: flex;
|
||
align-items: center;
|
||
font-size: 11px;
|
||
}
|
||
|
||
.initiative-card .initiative-reactions-label{
|
||
margin-right: 4px;
|
||
}
|
||
|
||
.initiative-card .initiative-reactions-box{
|
||
width: 14px;
|
||
border: none;
|
||
border-bottom: 1px solid #000;
|
||
text-align: center;
|
||
font-size: 11px;
|
||
background: transparent;
|
||
}
|
||
|
||
/* sheet381 regen: Reactions styling + alignment tweaks */
|
||
.initiative-card .initiative-reactions{
|
||
font-size: 13px;
|
||
}
|
||
.initiative-card .initiative-reactions-label{
|
||
color: #000;
|
||
font-size: 13px;
|
||
}
|
||
.initiative-card .initiative-reactions-box{
|
||
width: 22px;
|
||
font-size: 13px;
|
||
}
|
||
|
||
/* sheet391: Balance Core Stats bottom spacing (HP -> Hit Rating -> Move Speed -> card bottom) */
|
||
.core-stats-card .hp-panel{
|
||
margin-bottom: 5px;
|
||
}
|
||
|
||
.core-stats-card .corestat-row.hr-row{
|
||
margin-top: 0px;
|
||
margin-bottom: 5px;
|
||
}
|
||
|
||
.core-stats-card .corestat-row{
|
||
margin-top: 0px;
|
||
}
|
||
|
||
.core-stats-card{
|
||
padding-bottom: 5px;
|
||
}
|
||
|
||
|
||
.core-stats-card .corestat-row.hr-row {
|
||
margin-top: 5px;
|
||
}
|
||
|
||
.core-stats-card .corestat-row.movespeed-row {
|
||
margin-top: 5px;
|
||
}
|
||
|
||
/* sheet393: move ONLY Move Speed down 5px */
|
||
.core-stats-card .corestat-row.movespeed-row {
|
||
margin-top: 5px;
|
||
}
|
||
|
||
/* sheet395: Core Stats spacing adjustments (from sheet393 baseline)
|
||
- Increase gap between Hit Rating and Move Speed by 5px (without moving Hit Rating closer to Hit Points)
|
||
- Reduce overall Core Stats card height by 5px
|
||
*/
|
||
.core-stats-card .corestat-row.hr-row{
|
||
margin-bottom: 23px; /* 18px default + 5px */
|
||
}
|
||
|
||
.core-stats-card .corestat-row.movespeed-row{
|
||
margin-top: 18px; /* keep default top spacing */
|
||
margin-bottom: 8px; /* 18px default - 10px => net card height -5px after HR +5 */
|
||
}
|
||
|
||
/* sheet396: Hit Rating color + spacing */
|
||
|
||
|
||
/* sheet397: exact Initiative-blue for Hit Rating */
|
||
.core-stats-card .corestat-row.hr-row .corestat-label{
|
||
color: #1e4db7;
|
||
} |