/* Sourcebooks read on the site: /sourcebooks/<book> and its chapters.
 *
 * The stat blocks (.weapon, .weapon-detail, .ammo, .quality-meta) are the web
 * rendering of the blocks the armory books define for print in their own
 * homebrewery/css/override.css. Same classes, same colours, sized for a screen.
 * Loaded after rulebook.css, only on sourcebook pages.
 */

:root {
  /* Damage types, deliberately outside the dice palette so a weapon accent is
     never mistaken for a die colour. */
  --ends-thrust:    #1a7fff;
  --ends-thrust-dk: #0055bb;
  --ends-cut:       #aa0011;
  --ends-cut-dk:    #7a000c;
  --ends-crush:     #a07800;
  --ends-crush-dk:  #6e5300;
  /* The Modern Armory's types. */
  --ends-ballistic:    #475569;
  --ends-ballistic-dk: #334155;
  --ends-blast:        #b45309;
  --ends-blast-dk:     #92400e;
  --ends-fire:         #dc2626;
  --ends-fire-dk:      #b91c1c;
  /* The Stellar Armory's types. */
  --ends-beam:          #0e9f6e;
  --ends-beam-dk:       #047857;
  --ends-plasma:        #c026d3;
  --ends-plasma-dk:     #86198f;
  --ends-disruption:    #0891b2;
  --ends-disruption-dk: #0e7490;
  --ends-gravitic:      #4f46e5;
  --ends-gravitic-dk:   #3730a3;
  /* Armour weights. */
  --ends-armour-light:  #64748b;
  --ends-armour-medium: #2d4864;
  --ends-armour-heavy:  #1b2040;
  --ends-weapon-field-bg:     rgba(45, 72, 100, 0.08);
  --ends-weapon-field-border: rgba(45, 72, 100, 0.22);
}

/* ── Book pages ───────────────────────────────────────────────────────────── */

.book-crumbs {
  margin-bottom: 1rem;
  font-family: var(--tblr-font-sans-serif);
  font-size: 0.9rem;
  color: var(--ends-text-muted);
}
.book-crumbs a { color: var(--ends-navy); }
.book-crumbs span[aria-hidden] { margin: 0 0.35rem; opacity: 0.5; }

.book-hero {
  display: grid;
  gap: 1.75rem;
  align-items: center;
  margin-bottom: 2rem;
}
@media (min-width: 768px) {
  .book-hero { grid-template-columns: minmax(180px, 280px) minmax(0, 1fr); }
  .book-hero-plain { grid-template-columns: minmax(0, 1fr); }
}
.book-hero-cover {
  width: 100%;
  height: auto;
  max-width: 320px;
  border-radius: 8px;
  box-shadow: 0 18px 40px rgba(27, 32, 64, 0.22);
}
.book-hero-subtitle {
  font-family: var(--tblr-font-sans-serif);
  font-size: 1.15rem;
  font-weight: 700;
  color: var(--ends-navy);
}

.book-chapter-kicker {
  margin: 0 0 0.25rem;
  font-family: var(--tblr-font-sans-serif);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ends-purple);
}

.sourcebook-content img.framed,
.sourcebook-content img {
  display: block;
  max-width: 100%;
  height: auto;
  margin: 1.25rem auto;
  border-radius: 6px;
}

.sourcebook-content hr {
  margin: 1.75rem 0;
  opacity: 0.12;
}

/* ── Weapon entry ─────────────────────────────────────────────────────────── */

/* Heading pip, coloured by damage type. */
.sourcebook-content .weapon-bar,
.sourcebook-content .ammo-bar,
.sourcebook-content .qual-bar {
  display: inline-block;
  width: 0.45em;
  height: 0.95em;
  margin-right: 0.45em;
  vertical-align: -0.08em;
  background: var(--ends-navy);
  border-radius: 1px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.08);
}
.sourcebook-content .weapon-bar.thrust,
.sourcebook-content .ammo-bar.thrust { background: var(--ends-thrust); }
.sourcebook-content .weapon-bar.cut,
.sourcebook-content .ammo-bar.cut    { background: var(--ends-cut); }
.sourcebook-content .weapon-bar.crush,
.sourcebook-content .ammo-bar.crush  { background: var(--ends-crush); }
.sourcebook-content .weapon-bar.cut-thrust   { background: linear-gradient(to bottom, var(--ends-cut), var(--ends-thrust)); }
.sourcebook-content .weapon-bar.crush-thrust { background: linear-gradient(to bottom, var(--ends-crush), var(--ends-thrust)); }
.sourcebook-content .weapon-bar.cut-crush    { background: linear-gradient(to bottom, var(--ends-cut), var(--ends-crush)); }
.sourcebook-content .weapon-bar.switch       { background: linear-gradient(to bottom, var(--ends-cut), var(--ends-crush), var(--ends-thrust)); }
.sourcebook-content .weapon-bar.none,
.sourcebook-content .ammo-bar,
.sourcebook-content .ammo-bar.none { background: var(--ends-text-muted); }

.sourcebook-content h5:has(.weapon-bar),
.sourcebook-content h5:has(.ammo-bar) {
  margin-top: 2rem;
  margin-bottom: 0.15rem;
  font-family: var(--theme-header-font);
  font-variant: normal;
  font-size: 1.45rem;
  line-height: 1.15;
}

/* "Also known as" line. Markdown leaves it in the heading's own block. */
.sourcebook-content .weapon-aka {
  display: block;
  margin: 0 0 0.5rem;
  font-style: italic;
  font-size: 0.98rem;
  line-height: 1.3;
  color: var(--ends-text-muted);
}
.sourcebook-content .weapon-aka::before {
  content: 'Also known as ';
  margin-right: 0.25rem;
  font-family: var(--tblr-font-sans-serif);
  font-style: normal;
  font-size: 0.66rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  opacity: 0.7;
}

/* Markdown wraps the spans in a paragraph; dissolve it so they stay direct
   flex children. */
.sourcebook-content .weapon > p,
.sourcebook-content .weapon-detail > p,
.sourcebook-content .weapon-profile > p,
.sourcebook-content .ammo > p,
.sourcebook-content .quality-meta > p {
  display: contents;
}

/* Pill row: DAMAGE / CRIT / RANGE / ENC */
.sourcebook-content .weapon {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0.4rem 0 0;
  padding: 6px 0;
  border-top: 3px solid var(--ends-navy);
  border-bottom: 1px solid rgba(45, 72, 100, 0.15);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .weapon span {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-width: 3.6rem;
  min-height: 3.4rem;
  padding: 0.3rem 0.65rem;
  border-radius: 5px;
  background: var(--ends-navy);
  color: #fff;
  font-size: 1.45rem;
  font-weight: 700;
  line-height: 1;
  text-align: center;
}
.sourcebook-content .weapon span::before {
  display: block;
  margin-bottom: 0.25rem;
  font-size: 0.62rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  opacity: 0.8;
}
.sourcebook-content .weapon .dmg::before   { content: 'Damage'; }
.sourcebook-content .weapon .crit::before  { content: 'Crit'; }
.sourcebook-content .weapon .range::before { content: 'Range'; }
.sourcebook-content .weapon .enc::before   { content: 'Enc'; }
.sourcebook-content .weapon .range { font-size: 1.05rem; letter-spacing: 0.02em; }
.sourcebook-content .weapon .enc.na { opacity: 0.45; }

/* Damage-type accents: top border on the row, fill on the DAMAGE pill. */
.sourcebook-content .weapon.thrust { border-top-color: var(--ends-thrust); }
.sourcebook-content .weapon.cut    { border-top-color: var(--ends-cut); }
.sourcebook-content .weapon.crush  { border-top-color: var(--ends-crush); }
.sourcebook-content .weapon.none   { border-top-color: var(--ends-text-muted); }
.sourcebook-content .weapon.thrust .dmg { background: var(--ends-thrust-dk); }
.sourcebook-content .weapon.cut    .dmg { background: var(--ends-cut-dk); }
.sourcebook-content .weapon.crush  .dmg { background: var(--ends-crush-dk); }
.sourcebook-content .weapon.none   .dmg { background: var(--ends-text-muted); }

.sourcebook-content .weapon.cut-thrust,
.sourcebook-content .weapon.crush-thrust,
.sourcebook-content .weapon.cut-crush,
.sourcebook-content .weapon.switch { border-top-color: transparent; }
.sourcebook-content .weapon.cut-thrust   { border-image: linear-gradient(to right, var(--ends-cut), var(--ends-thrust)) 1; }
.sourcebook-content .weapon.crush-thrust { border-image: linear-gradient(to right, var(--ends-crush), var(--ends-thrust)) 1; }
.sourcebook-content .weapon.cut-crush    { border-image: linear-gradient(to right, var(--ends-cut), var(--ends-crush)) 1; }
.sourcebook-content .weapon.switch       { border-image: linear-gradient(to right, var(--ends-cut), var(--ends-crush), var(--ends-thrust)) 1; }
.sourcebook-content .weapon.cut-thrust   .dmg { background: linear-gradient(135deg, var(--ends-cut-dk), var(--ends-thrust-dk)); }
.sourcebook-content .weapon.crush-thrust .dmg { background: linear-gradient(135deg, var(--ends-crush-dk), var(--ends-thrust-dk)); }
.sourcebook-content .weapon.cut-crush    .dmg { background: linear-gradient(135deg, var(--ends-cut-dk), var(--ends-crush-dk)); }
.sourcebook-content .weapon.switch       .dmg { background: linear-gradient(135deg, var(--ends-cut-dk), var(--ends-crush-dk), var(--ends-thrust-dk)); }

.sourcebook-content .weapon.versatile {
  padding: 6px;
  border-radius: 5px 5px 0 0;
  box-shadow: 0 0 0 1px rgba(246, 147, 55, 0.35);
}

/* Detail row: SKILL / PRICE / AVAIL / TYPE / QUALITIES */
.sourcebook-content .weapon-detail {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 8px 0 12px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(45, 72, 100, 0.15);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .weapon-detail span {
  display: flex;
  align-items: baseline;
  padding: 0.35rem 0.65rem;
  border: 1px solid var(--ends-weapon-field-border);
  border-radius: 5px;
  background: var(--ends-weapon-field-bg);
  color: var(--ends-navy);
  font-size: 0.98rem;
  font-weight: 600;
  line-height: 1.25;
}
.sourcebook-content .weapon-detail span::before {
  margin-right: 0.5rem;
  font-size: 0.64rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0.7;
}
.sourcebook-content .weapon-detail .skill::before { content: 'Skill'; }
.sourcebook-content .weapon-detail .price::before { content: 'Price'; }
.sourcebook-content .weapon-detail .avail::before { content: 'Avail'; }
.sourcebook-content .weapon-detail .type::before  { content: 'Type'; }
.sourcebook-content .weapon-detail .qual::before  { content: 'Qualities'; }
.sourcebook-content .weapon-detail .qual  { flex: 1 1 100%; }
.sourcebook-content .weapon-detail .price { border-left: 3px solid var(--ends-blue); font-weight: 700; }

/* One row per profile on a Versatile weapon. */
.sourcebook-content .weapon-profile {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin: 4px 0 0;
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .weapon-profile span {
  display: flex;
  align-items: center;
  padding: 0.3rem 0.65rem;
  background: rgba(45, 72, 100, 0.045);
  color: var(--ends-navy);
  font-size: 0.94rem;
  line-height: 1.25;
}
.sourcebook-content .weapon-profile .pname {
  flex: 0 0 auto;
  min-width: 8rem;
  border-left: 3px solid var(--ends-amber);
  color: var(--ends-amber);
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.sourcebook-content .weapon-profile .pdmg  { flex: 0 0 auto; min-width: 8rem; font-weight: 700; }
.sourcebook-content .weapon-profile .pqual { flex: 1 1 12rem; }
.sourcebook-content .weapon-profile + p { margin-top: 0.9rem; }

/* Damage-type legend. */
.sourcebook-content .weapon-key {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin: 0.6rem 0;
  font-family: var(--tblr-font-sans-serif);
  font-size: 0.9rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
.sourcebook-content .weapon-key span { display: flex; align-items: center; gap: 6px; }
.sourcebook-content .weapon-key span::before {
  content: '';
  width: 0.45em;
  height: 0.95em;
  border-radius: 1px;
}
.sourcebook-content .weapon-key .thrust::before { background: var(--ends-thrust); }
.sourcebook-content .weapon-key .cut::before    { background: var(--ends-cut); }
.sourcebook-content .weapon-key .crush::before  { background: var(--ends-crush); }

/* ── Ammunition entry (The Ranged Armory) ─────────────────────────────────── */

.sourcebook-content .ammo {
  display: flex;
  align-items: stretch;
  gap: 6px;
  margin: 0.4rem 0 0.6rem;
  padding-top: 6px;
  border-top: 3px solid var(--ends-text-muted);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .ammo span {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: center;
  min-width: 3.6rem;
  padding: 0.3rem 0.65rem;
  border: 1px solid var(--ends-weapon-field-border);
  border-radius: 5px;
  background: var(--ends-weapon-field-bg);
  color: var(--ends-navy);
  font-size: 1.15rem;
  font-weight: 700;
  line-height: 1.1;
}
.sourcebook-content .ammo span::before {
  display: block;
  margin-bottom: 0.2rem;
  font-size: 0.62rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  opacity: 0.65;
}
.sourcebook-content .ammo .adjust::before { content: 'Adjustment'; }
.sourcebook-content .ammo .acost::before  { content: 'Price'; }
.sourcebook-content .ammo .aqty::before   { content: 'Per'; }
.sourcebook-content .ammo .adjust {
  flex: 1 1 auto;
  align-items: flex-start;
  font-size: 1rem;
  font-weight: 600;
  text-align: left;
}
.sourcebook-content .ammo.thrust { border-top-color: var(--ends-thrust); }
.sourcebook-content .ammo.cut    { border-top-color: var(--ends-cut); }
.sourcebook-content .ammo.crush  { border-top-color: var(--ends-crush); }
.sourcebook-content .ammo.thrust .acost { background: var(--ends-thrust-dk); border-color: var(--ends-thrust-dk); color: #fff; }
.sourcebook-content .ammo.cut    .acost { background: var(--ends-cut-dk);    border-color: var(--ends-cut-dk);    color: #fff; }
.sourcebook-content .ammo.crush  .acost { background: var(--ends-crush-dk);  border-color: var(--ends-crush-dk);  color: #fff; }

.sourcebook-content .ammo-fits {
  display: block;
  margin: 0 0 0.6rem;
  font-family: var(--tblr-font-sans-serif);
  font-size: 0.92rem;
  color: var(--ends-text-muted);
}
.sourcebook-content .ammo-fits::before {
  content: 'Accepts ';
  font-size: 0.64rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  opacity: 0.75;
}

/* ── Ballistic, Blast, Fire (The Modern Armory) ───────────────────────────── */

.sourcebook-content .weapon-bar.ballistic,
.sourcebook-content .ammo-bar.ballistic { background: var(--ends-ballistic); }
.sourcebook-content .weapon-bar.blast,
.sourcebook-content .ammo-bar.blast     { background: var(--ends-blast); }
.sourcebook-content .weapon-bar.fire,
.sourcebook-content .ammo-bar.fire      { background: var(--ends-fire); }

.sourcebook-content .weapon.ballistic,
.sourcebook-content .ammo.ballistic { border-top-color: var(--ends-ballistic); }
.sourcebook-content .weapon.blast,
.sourcebook-content .ammo.blast     { border-top-color: var(--ends-blast); }
.sourcebook-content .weapon.fire,
.sourcebook-content .ammo.fire      { border-top-color: var(--ends-fire); }

.sourcebook-content .weapon.ballistic .dmg { background: var(--ends-ballistic-dk); }
.sourcebook-content .weapon.blast     .dmg { background: var(--ends-blast-dk); }
.sourcebook-content .weapon.fire      .dmg { background: var(--ends-fire-dk); }

.sourcebook-content .ammo.ballistic .acost { background: var(--ends-ballistic-dk); border-color: var(--ends-ballistic-dk); color: #fff; }
.sourcebook-content .ammo.blast     .acost { background: var(--ends-blast-dk);     border-color: var(--ends-blast-dk);     color: #fff; }
.sourcebook-content .ammo.fire      .acost { background: var(--ends-fire-dk);      border-color: var(--ends-fire-dk);      color: #fff; }

/* ── Beam, Plasma, Disruption, Gravitic (The Stellar Armory) ──────────────── */

.sourcebook-content .weapon-bar.beam       { background: var(--ends-beam); }
.sourcebook-content .weapon-bar.plasma     { background: var(--ends-plasma); }
.sourcebook-content .weapon-bar.disruption { background: var(--ends-disruption); }
.sourcebook-content .weapon-bar.gravitic   { background: var(--ends-gravitic); }
.sourcebook-content .weapon.beam       { border-top-color: var(--ends-beam); }
.sourcebook-content .weapon.plasma     { border-top-color: var(--ends-plasma); }
.sourcebook-content .weapon.disruption { border-top-color: var(--ends-disruption); }
.sourcebook-content .weapon.gravitic   { border-top-color: var(--ends-gravitic); }
.sourcebook-content .weapon.beam       .dmg { background: var(--ends-beam-dk); }
.sourcebook-content .weapon.plasma     .dmg { background: var(--ends-plasma-dk); }
.sourcebook-content .weapon.disruption .dmg { background: var(--ends-disruption-dk); }
.sourcebook-content .weapon.gravitic   .dmg { background: var(--ends-gravitic-dk); }

/* ── Armour entry (The Armourer, The Stellar Armory) ──────────────────────── */

.sourcebook-content .armour-bar {
  display: inline-block;
  width: 0.45em;
  height: 0.95em;
  margin-right: 0.45em;
  vertical-align: -0.08em;
  background: var(--ends-armour-medium);
  border-radius: 1px;
}
.sourcebook-content .armour-bar.light { background: var(--ends-armour-light); }
.sourcebook-content .armour-bar.heavy { background: var(--ends-armour-heavy); }

.sourcebook-content h5:has(.armour-bar) {
  margin-top: 2rem;
  margin-bottom: 0.15rem;
  font-family: var(--theme-header-font);
  font-variant: normal;
  font-size: 1.45rem;
  line-height: 1.15;
}

.sourcebook-content .armour > p,
.sourcebook-content .armour-detail > p {
  display: contents;
}

.sourcebook-content .armour {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0.4rem 0 0;
  padding: 6px 0;
  border-top: 3px solid var(--ends-armour-medium);
  border-bottom: 1px solid rgba(45, 72, 100, 0.15);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .armour.light { border-top-color: var(--ends-armour-light); }
.sourcebook-content .armour.heavy { border-top-color: var(--ends-armour-heavy); border-top-width: 5px; }
.sourcebook-content .armour span {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-width: 4.6rem;
  min-height: 3.4rem;
  padding: 0.3rem 0.65rem;
  border-radius: 5px;
  background: var(--ends-navy);
  color: #fff;
  font-size: 1.45rem;
  font-weight: 700;
  line-height: 1;
}
.sourcebook-content .armour span::before {
  display: block;
  margin-bottom: 0.25rem;
  font-size: 0.62rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0.8;
}
.sourcebook-content .armour .res::before  { content: 'Resistance'; }
.sourcebook-content .armour .mdef::before { content: 'Melee Def'; }
.sourcebook-content .armour .rdef::before { content: 'Ranged Def'; }
.sourcebook-content .armour .enc::before  { content: 'Enc'; }
.sourcebook-content .armour.light  .res { background: var(--ends-armour-light); }
.sourcebook-content .armour.medium .res { background: var(--ends-armour-medium); }
.sourcebook-content .armour.heavy  .res { background: var(--ends-armour-heavy); }

.sourcebook-content .armour-detail {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 8px 0 12px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(45, 72, 100, 0.15);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .armour-detail span {
  display: flex;
  align-items: baseline;
  padding: 0.35rem 0.65rem;
  border: 1px solid var(--ends-weapon-field-border);
  border-radius: 5px;
  background: var(--ends-weapon-field-bg);
  color: var(--ends-navy);
  font-size: 0.98rem;
  font-weight: 600;
  line-height: 1.25;
}
.sourcebook-content .armour-detail span::before {
  margin-right: 0.5rem;
  font-size: 0.64rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0.7;
}
.sourcebook-content .armour-detail .price::before { content: 'Price'; }
.sourcebook-content .armour-detail .avail::before { content: 'Avail'; }
.sourcebook-content .armour-detail .from::before  { content: 'From'; }
.sourcebook-content .armour-detail .qual::before  { content: 'Qualities'; }
.sourcebook-content .armour-detail .qual  { flex: 1 1 100%; }
.sourcebook-content .armour-detail .price { border-left: 3px solid var(--ends-blue); font-weight: 700; }

/* ── Quality entry (Chapter 3 of the armories) ───────────────────────────── */

.sourcebook-content .qual-bar.active   { background: var(--ends-amber); }
.sourcebook-content .qual-bar.passive  { background: var(--ends-navy); }
.sourcebook-content .qual-bar.drawback { background: var(--ends-red); }

.sourcebook-content .quality-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0.3rem 0 0.6rem;
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .quality-meta span {
  display: inline-flex;
  align-items: center;
  padding: 0.1rem 0.55rem;
  border: 1px solid rgba(45, 72, 100, 0.2);
  border-radius: 4px;
  background: rgba(45, 72, 100, 0.09);
  color: var(--ends-navy);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  line-height: 1.6;
  text-transform: uppercase;
}
.sourcebook-content .quality-meta.active .qtype {
  background: var(--ends-amber); border-color: var(--ends-amber); color: #fff;
}
.sourcebook-content .quality-meta.passive .qtype {
  background: var(--ends-navy); border-color: var(--ends-navy); color: #fff;
}
.sourcebook-content .quality-meta.drawback .qtype,
.sourcebook-content .quality-meta .qdraw {
  background: var(--ends-red); border-color: var(--ends-red); color: #fff;
}

/* ── Credits block on the About page ──────────────────────────────────────── */

.sourcebook-content .credits p { margin-bottom: 0.35rem; }

@media (max-width: 575.98px) {
  .sourcebook-content .weapon span { min-width: 3rem; min-height: 3rem; font-size: 1.2rem; }
  .sourcebook-content .weapon .range { font-size: 0.95rem; }
}

/* ── Substance entry (The Apothecary) ─────────────────────────────────────── */

:root {
  --ends-toxin:     #3f6b2a;
  --ends-sedative:  #4c3f91;
  --ends-stimulant: #b4530a;
  --ends-medicine:  #0f6e84;
  --ends-antidote:  #1d5fbf;
  --ends-agent:     #7a6a12;
  --ends-caustic:   #a3271f;
}

.sourcebook-content .substance-bar {
  display: inline-block;
  width: 0.45em;
  height: 0.95em;
  margin-right: 0.45em;
  vertical-align: -0.08em;
  background: var(--ends-navy);
  border-radius: 1px;
}
.sourcebook-content .substance-bar.toxin     { background: var(--ends-toxin); }
.sourcebook-content .substance-bar.sedative  { background: var(--ends-sedative); }
.sourcebook-content .substance-bar.stimulant { background: var(--ends-stimulant); }
.sourcebook-content .substance-bar.medicine  { background: var(--ends-medicine); }
.sourcebook-content .substance-bar.antidote  { background: var(--ends-antidote); }
.sourcebook-content .substance-bar.agent     { background: var(--ends-agent); }
.sourcebook-content .substance-bar.caustic   { background: var(--ends-caustic); }

.sourcebook-content h5:has(.substance-bar) {
  margin-top: 2rem;
  margin-bottom: 0.15rem;
  font-family: var(--theme-header-font);
  font-variant: normal;
  font-size: 1.45rem;
  line-height: 1.15;
}

.sourcebook-content .substance > p,
.sourcebook-content .substance-detail > p {
  display: contents;
}

.sourcebook-content .substance {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0.4rem 0 0;
  padding: 6px 0;
  border-top: 3px solid var(--ends-navy);
  border-bottom: 1px solid rgba(45, 72, 100, 0.15);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .substance.toxin     { border-top-color: var(--ends-toxin); }
.sourcebook-content .substance.sedative  { border-top-color: var(--ends-sedative); }
.sourcebook-content .substance.stimulant { border-top-color: var(--ends-stimulant); }
.sourcebook-content .substance.medicine  { border-top-color: var(--ends-medicine); }
.sourcebook-content .substance.antidote  { border-top-color: var(--ends-antidote); }
.sourcebook-content .substance.agent     { border-top-color: var(--ends-agent); }
.sourcebook-content .substance.caustic   { border-top-color: var(--ends-caustic); }
.sourcebook-content .substance span {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-width: 4.6rem;
  min-height: 3.4rem;
  padding: 0.3rem 0.75rem;
  border-radius: 5px;
  background: var(--ends-navy);
  color: #fff;
  font-size: 1.05rem;
  font-weight: 700;
  line-height: 1;
  white-space: nowrap;
}
.sourcebook-content .substance span::before {
  display: block;
  margin-bottom: 0.3rem;
  font-size: 0.62rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0.8;
}
.sourcebook-content .substance .pot { font-size: 1.45rem; }
.sourcebook-content .substance .pot::before      { content: 'Potency'; }
.sourcebook-content .substance .onset::before    { content: 'Onset'; }
.sourcebook-content .substance .interval::before { content: 'Interval'; }
.sourcebook-content .substance .course::before   { content: 'Course'; }
.sourcebook-content .substance .lasts::before    { content: 'Lasts'; }
.sourcebook-content .substance .limit::before    { content: 'Limit'; }
.sourcebook-content .substance.toxin     .pot { background: var(--ends-toxin); }
.sourcebook-content .substance.sedative  .pot { background: var(--ends-sedative); }
.sourcebook-content .substance.stimulant .pot { background: var(--ends-stimulant); }
.sourcebook-content .substance.medicine  .pot { background: var(--ends-medicine); }
.sourcebook-content .substance.antidote  .pot { background: var(--ends-antidote); }
.sourcebook-content .substance.agent     .pot { background: var(--ends-agent); }
.sourcebook-content .substance.caustic   .pot { background: var(--ends-caustic); }

.sourcebook-content .substance-detail {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 8px 0 8px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(45, 72, 100, 0.15);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .substance-detail span {
  display: flex;
  align-items: baseline;
  padding: 0.35rem 0.65rem;
  border: 1px solid var(--ends-weapon-field-border);
  border-radius: 5px;
  background: var(--ends-weapon-field-bg);
  color: var(--ends-navy);
  font-size: 0.98rem;
  font-weight: 600;
  line-height: 1.25;
}
.sourcebook-content .substance-detail span::before {
  margin-right: 0.5rem;
  font-size: 0.64rem;
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0.7;
}
.sourcebook-content .substance-detail .vector::before { content: 'Vector'; }
.sourcebook-content .substance-detail .price::before  { content: 'Price'; }
.sourcebook-content .substance-detail .avail::before  { content: 'Avail'; }
.sourcebook-content .substance-detail .period::before { content: 'Period'; }
.sourcebook-content .substance-detail .qual::before   { content: 'Tags'; }
.sourcebook-content .substance-detail .qual  { flex: 1 1 100%; }
.sourcebook-content .substance-detail .price { border-left: 3px solid var(--ends-blue); font-weight: 700; }

/* ── Ship weapon block (The Starship Armory): .weapon with .ship ──────────── */

.sourcebook-content .weapon.ship .mount::before { content: 'Mount'; }
.sourcebook-content .weapon.ship .dmg::before   { content: 'Hull'; }
.sourcebook-content .weapon.ship .sys::before   { content: 'Sys'; }
.sourcebook-content .weapon.ship .heat::before  { content: 'Heat'; }
.sourcebook-content .weapon.ship .pwr::before   { content: 'Pwr'; }
.sourcebook-content .weapon.ship .mount,
.sourcebook-content .weapon.ship .range { font-size: 0.95rem; white-space: nowrap; padding-left: 0.7rem; padding-right: 0.7rem; }
.sourcebook-content .weapon.ship .heat { background: #7a2e12; }
.sourcebook-content .weapon.ship .pwr  { background: #2f4f7a; }

/* The Heavy Armory: a Crew pill on .weapon.ship and a From field on .weapon-detail. */
.sourcebook-content .weapon.ship .crew::before { content: 'Crew'; }
.sourcebook-content .weapon.ship .crew { background: #4a3b2a; }
.sourcebook-content .weapon-detail .from::before { content: 'From'; }

/* ── Mount entry (The Stable) ─────────────────────────────────────────────── */

:root { --ends-mount-land: #6b4f2a; --ends-mount-air: #2f6fa8; --ends-mount-water: #0f7b78; }

.sourcebook-content .mount-bar {
  display: inline-block; width: 0.45em; height: 0.95em; margin-right: 0.45em;
  vertical-align: -0.08em; background: var(--ends-mount-land); border-radius: 1px;
}
.sourcebook-content .mount-bar.air   { background: var(--ends-mount-air); }
.sourcebook-content .mount-bar.water { background: var(--ends-mount-water); }
.sourcebook-content h5:has(.mount-bar) {
  margin-top: 2rem; margin-bottom: 0.15rem; font-family: var(--theme-header-font);
  font-variant: normal; font-size: 1.45rem; line-height: 1.15;
}
.sourcebook-content .mount > p,
.sourcebook-content .mount-detail > p { display: contents; }
.sourcebook-content .mount {
  display: flex; flex-wrap: wrap; gap: 6px; margin: 0.4rem 0 0; padding: 6px 0;
  border-top: 3px solid var(--ends-mount-land);
  border-bottom: 1px solid rgba(45, 72, 100, 0.15);
  font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .mount.air   { border-top-color: var(--ends-mount-air); }
.sourcebook-content .mount.water { border-top-color: var(--ends-mount-water); }
.sourcebook-content .mount span {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  min-width: 4.2rem; min-height: 3.4rem; padding: 0.3rem 0.7rem; border-radius: 5px;
  background: var(--ends-navy); color: #fff; font-size: 1.3rem; font-weight: 700; line-height: 1; white-space: nowrap;
}
.sourcebook-content .mount span::before {
  display: block; margin-bottom: 0.3rem; font-size: 0.62rem; font-weight: 400;
  letter-spacing: 0.08em; text-transform: uppercase; white-space: nowrap; opacity: 0.8;
}
.sourcebook-content .mount .scale::before  { content: 'Scale'; }
.sourcebook-content .mount .speed::before  { content: 'Speed'; }
.sourcebook-content .mount .wounds::before { content: 'Wounds'; }
.sourcebook-content .mount .res::before    { content: 'Resistance'; }
.sourcebook-content .mount .def::before    { content: 'Def M / R'; }
.sourcebook-content .mount .carry::before  { content: 'Carry'; }
.sourcebook-content .mount .speed { font-size: 1rem; }
.sourcebook-content .mount.land  .scale { background: var(--ends-mount-land); }
.sourcebook-content .mount.air   .scale { background: var(--ends-mount-air); }
.sourcebook-content .mount.water .scale { background: var(--ends-mount-water); }
.sourcebook-content .mount-detail {
  display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0 12px; padding-bottom: 8px;
  border-bottom: 1px solid rgba(45, 72, 100, 0.15); font-family: var(--tblr-font-sans-serif);
}
.sourcebook-content .mount-detail span {
  display: flex; align-items: baseline; padding: 0.35rem 0.65rem;
  border: 1px solid var(--ends-weapon-field-border); border-radius: 5px;
  background: var(--ends-weapon-field-bg); color: var(--ends-navy);
  font-size: 0.98rem; font-weight: 600; line-height: 1.25;
}
.sourcebook-content .mount-detail span::before {
  margin-right: 0.5rem; font-size: 0.64rem; font-weight: 400; letter-spacing: 0.08em;
  text-transform: uppercase; white-space: nowrap; opacity: 0.7;
}
.sourcebook-content .mount-detail .chars::before  { content: 'Mig Agi Int Sav Wil Cha'; }
.sourcebook-content .mount-detail .travel::before { content: 'Travel'; }
.sourcebook-content .mount-detail .price::before  { content: 'Price'; }
.sourcebook-content .mount-detail .avail::before  { content: 'Avail'; }
.sourcebook-content .mount-detail .fit::before    { content: 'Barding'; }
.sourcebook-content .mount-detail .qual::before   { content: 'Traits'; }
.sourcebook-content .mount-detail .qual  { flex: 1 1 100%; }
.sourcebook-content .mount-detail .price { border-left: 3px solid var(--ends-blue); font-weight: 700; }
