Files
dmtools/assets/styles/app.css
T
FrankandClaude Sonnet 5 2ed169fc78 Tracker: unfold a combatant's stat block inline
- extract the 5e stat-block markup into enemy/_statblock.html.twig
  (sb.block(enemy) macro); the enemy detail page now uses it too
- each tracker combatant gets a "stat block" toggle that expands the
  block in place (Bootstrap collapse), so you don't have to leave the
  encounter to check AC / attacks
- open blocks are remembered in localStorage and re-opened after each
  damage/heal reload, and the caret rotates when expanded

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-06 19:29:52 +02:00

127 lines
2.7 KiB
CSS

/* dmtools project styles. Bootstrap + DataTables (bs5) are imported from app.js. */
body {
min-height: 100vh;
}
main.app-main {
padding-top: 1.5rem;
padding-bottom: 3rem;
}
.navbar-brand {
font-weight: 600;
letter-spacing: 0.02em;
}
.login-card {
max-width: 24rem;
margin: 8vh auto 0;
}
/* Let DataTables' controls breathe inside a Bootstrap card. */
table.dataTable {
width: 100% !important;
}
/* --- Family tree --------------------------------------------------------- */
.family-tree,
.family-tree ul {
list-style: none;
margin: 0;
padding-left: 1.25rem;
}
.family-tree {
padding-left: 0;
}
.family-tree li {
position: relative;
padding: 0.15rem 0 0.15rem 1rem;
}
.family-tree ul > li::before { /* elbow connector */
content: "";
position: absolute;
top: 0;
left: 0;
bottom: 50%;
width: 0.75rem;
border-left: 1px solid var(--bs-border-color);
border-bottom: 1px solid var(--bs-border-color);
}
.family-tree ul > li::after { /* line continuing to siblings below */
content: "";
position: absolute;
top: 0;
left: 0;
height: 100%;
border-left: 1px solid var(--bs-border-color);
}
.family-tree ul > li:last-child::after {
display: none;
}
.ft-couple {
display: inline-flex;
align-items: center;
gap: 0.4rem;
flex-wrap: wrap;
}
.ft-person {
display: inline-flex;
align-items: center;
gap: 0.45rem;
padding: 0.2rem 0.5rem;
border: 1px solid var(--bs-border-color);
border-radius: 0.375rem;
text-decoration: none;
color: inherit;
background: var(--bs-body-bg);
}
.ft-person:hover {
border-color: var(--bs-primary);
}
.ft-name {
font-weight: 500;
}
.ft-meta {
font-size: 0.8125rem;
color: var(--bs-secondary-color);
}
.ft-amp {
color: var(--bs-secondary-color);
}
/* --- Art gallery ------------------------------------------------------- */
.art-thumb {
height: 180px;
display: flex;
align-items: center;
justify-content: center;
padding: 0.4rem;
background: var(--bs-tertiary-bg);
border-bottom: 1px solid var(--bs-border-color);
border-top-left-radius: inherit;
border-top-right-radius: inherit;
overflow: hidden;
}
.art-thumb img {
max-width: 100%;
max-height: 100%;
object-fit: contain; /* whole image, never cropped */
}
.art-full img {
max-width: 100%;
height: auto;
}
/* --- Tracker: unfoldable stat blocks --------------------------------- */
[data-bs-toggle="collapse"] .sb-caret {
display: inline-block;
transition: transform 0.15s ease;
}
[data-bs-toggle="collapse"][aria-expanded="true"] .sb-caret {
transform: rotate(90deg);
}
.statblock-collapse h3 {
margin-top: 0.75rem;
}