/* 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; } /* --- Overview tiles ------------------------------------------------------ */ .home-tile { transition: border-color 0.12s ease, transform 0.12s ease; } .home-tile:hover { border-color: var(--bs-primary); transform: translateY(-2px); } /* --- Storyline: chapter index ----------------------------------------- */ .storyline-chapter-list { display: grid; gap: 0.75rem; max-width: 60rem; } .storyline-chapter-card { display: flex; align-items: flex-start; gap: 1rem; padding: 1rem 1.25rem; border: 1px solid var(--bs-border-color); border-radius: 0.5rem; background: var(--bs-body-bg); text-decoration: none; color: inherit; transition: border-color 0.12s ease, transform 0.12s ease; } .storyline-chapter-card:hover { border-color: var(--bs-primary); transform: translateY(-2px); } .storyline-chapter-num { flex: 0 0 auto; width: 2rem; height: 2rem; display: grid; place-items: center; border-radius: 50%; background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color); font-variant-numeric: tabular-nums; font-weight: 600; } .storyline-chapter-body { flex: 1 1 auto; min-width: 0; } .storyline-chapter-title { display: block; font-size: 1.125rem; font-weight: 600; } .storyline-chapter-summary { display: block; color: var(--bs-secondary-color); font-size: 0.9375rem; margin-top: 0.15rem; } .storyline-chapter-go { align-self: center; color: var(--bs-secondary-color); font-size: 1.25rem; } /* --- Storyline: chapter layout + table of contents ------------------- */ .storyline-toc { position: sticky; top: 1.5rem; font-size: 0.9375rem; } .storyline-toc-link { display: flex; gap: 0.5rem; padding: 0.3rem 0.5rem; border-radius: 0.375rem; border-left: 2px solid transparent; text-decoration: none; color: var(--bs-secondary-color); } .storyline-toc-link:hover { color: var(--bs-body-color); background: var(--bs-tertiary-bg); } .storyline-toc-link.is-active { color: var(--bs-body-color); border-left-color: var(--bs-primary); background: var(--bs-tertiary-bg); font-weight: 600; } .storyline-toc-num { font-variant-numeric: tabular-nums; color: var(--bs-secondary-color); } /* --- Storyline: the document itself --------------------------------- */ .storyline-doc { max-width: 46rem; font-size: 1.05rem; line-height: 1.7; } .storyline-doc-head { margin-bottom: 2.5rem; padding-bottom: 1.25rem; border-bottom: 1px solid var(--bs-border-color); } .storyline-eyebrow { text-transform: uppercase; letter-spacing: 0.09em; font-size: 0.8rem; font-weight: 700; color: var(--bs-primary); } .storyline-doc-head h1 { margin: 0.35rem 0 0.5rem; font-size: clamp(1.9rem, 4vw, 2.6rem); line-height: 1.15; } .storyline-standfirst { font-size: 1.15rem; color: var(--bs-secondary-color); font-style: italic; margin: 0; } .storyline-doc p { margin: 0 0 1.1rem; } .storyline-doc u { text-underline-offset: 0.18em; text-decoration-thickness: 1px; } .storyline-section { display: flex; align-items: baseline; gap: 0.75rem; margin: 2.75rem 0 1rem; padding-top: 1.25rem; border-top: 1px solid var(--bs-border-color); font-size: 1.45rem; line-height: 1.25; } .storyline-section span { flex: 0 0 auto; font-variant-numeric: tabular-nums; font-size: 0.9rem; font-weight: 700; color: var(--bs-primary); padding-top: 0.35rem; } .storyline-lead { font-size: 1.15rem; } .storyline-lead::first-letter { /* subtle emphasis on the opening line of a section */ font-weight: 600; } .storyline-turn { font-size: 1.2rem; font-weight: 600; text-align: center; margin: 1.75rem 0 !important; } /* Pull-quotes for in-world spoken lines */ .storyline-quote { margin: 1.5rem 0; padding: 0.6rem 0 0.6rem 1.25rem; border-left: 3px solid var(--bs-primary); font-size: 1.2rem; font-style: italic; color: var(--bs-body-color); } .storyline-quote::before { content: "\201C"; } .storyline-quote::after { content: "\201D"; } .storyline-quote--close { border-left: 0; text-align: center; font-size: 1.3rem; padding: 1.5rem 1rem; margin-top: 2.5rem; border-top: 1px solid var(--bs-border-color); } /* GM callouts */ .storyline-callout { position: relative; margin: 1.75rem 0; padding: 1.1rem 1.25rem 1.1rem 1.25rem; background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color); border-left: 3px solid var(--bs-info, #6ea8fe); border-radius: 0.4rem; } .storyline-callout > :last-child { margin-bottom: 0; } .storyline-callout::before { content: attr(data-label); display: block; text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.72rem; font-weight: 700; color: var(--bs-secondary-color); margin-bottom: 0.4rem; } .storyline-callout--warn { border-left-color: var(--bs-warning, #ffc107); } /* The escalation ladder in the Final Crisis */ .storyline-ladder { margin: 1.25rem 0; padding-left: 0; list-style: none; counter-reset: rung; } .storyline-ladder li { counter-increment: rung; position: relative; padding: 0.55rem 0.9rem 0.55rem 2.75rem; margin-bottom: 0.4rem; background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color); border-radius: 0.375rem; font-style: italic; } .storyline-ladder li::before { content: counter(rung); position: absolute; left: 0.9rem; font-style: normal; font-weight: 700; color: var(--bs-primary); } /* Quick-reference panels (numbers + cast) */ .storyline-ref { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); margin-bottom: 2.5rem; } .storyline-ref-panel { padding: 1.1rem 1.25rem; background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color); border-radius: 0.5rem; font-size: 0.95rem; line-height: 1.5; } .storyline-ref-panel h3 { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; color: var(--bs-secondary-color); margin: 0 0 0.75rem; } .storyline-ref-panel dl { margin: 0; } .storyline-ref-panel dl > div { display: flex; gap: 0.6rem; padding: 0.2rem 0; } .storyline-ref-panel dt { flex: 0 0 6.5rem; font-variant-numeric: tabular-nums; color: var(--bs-body-color); } .storyline-ref-panel dd { margin: 0; color: var(--bs-secondary-color); } .storyline-ref-panel ul { margin: 0; padding-left: 1.1rem; } .storyline-ref-panel li { margin-bottom: 0.5rem; } .storyline-ref-panel li:last-child { margin-bottom: 0; } /* Chapter pager */ .storyline-pager { display: flex; justify-content: space-between; gap: 1rem; margin-top: 3rem; padding-top: 1.25rem; border-top: 1px solid var(--bs-border-color); } .storyline-pager-link { display: flex; flex-direction: column; gap: 0.15rem; text-decoration: none; color: inherit; padding: 0.5rem 0.75rem; border: 1px solid var(--bs-border-color); border-radius: 0.4rem; max-width: 48%; } .storyline-pager-link:hover { border-color: var(--bs-primary); } .storyline-pager-dir { font-size: 0.8rem; color: var(--bs-secondary-color); } .storyline-pager-title { font-weight: 600; }