Files
WebtreesFullDiagram/resources/css/full-diagram.css
Alexander Bocken 7528d30de1 Add "more descendants" indicator and fix indicator draw order
Show small child-box indicators at bottom-right of person cards when
descendants exist beyond the current view. Fix both ancestor and
descendant indicators to draw connecting lines behind boxes.
2026-03-14 20:37:42 +01:00

279 lines
4.7 KiB
CSS

/* Full Diagram Chart Styles */
/* ── Container ── */
.full-diagram-container {
position: relative;
border: 1px solid #dee2e6;
border-radius: 0.5rem;
background: #f8f9fa;
overflow: hidden;
/* Break out of webtrees content column to use full viewport width */
width: 100vw;
margin-left: calc(-50vw + 50%);
border-radius: 0;
border-left: none;
border-right: none;
}
/* Block variant: stay within card boundaries */
.full-diagram-block {
width: 100%;
margin-left: 0;
border-radius: 0.5rem;
border: 1px solid #dee2e6;
}
.full-diagram-chart {
width: 100%;
height: 100%;
}
.full-diagram-chart svg {
width: 100%;
height: 100%;
display: block;
}
/* ── Person cards (SVG) ── */
.person-card rect {
fill: #e8e8e8;
stroke: #b0b0b0;
stroke-width: 1;
}
.person-card.sex-m rect {
fill: #d4e6f9;
stroke: #7bafd4;
}
.person-card.sex-f rect {
fill: #f9d4e6;
stroke: #d47ba8;
}
.person-card.is-root rect {
stroke: #495057;
stroke-width: 2.5;
filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.2));
}
.person-card:hover rect {
filter: drop-shadow(0 3px 8px rgba(0, 0, 0, 0.15));
}
/* Photo placeholder */
.person-card .photo-placeholder {
fill: #ddd;
stroke: none;
}
.person-card.sex-m .photo-placeholder {
fill: #b8d4ed;
}
.person-card.sex-f .photo-placeholder {
fill: #edb8d4;
}
.person-card .silhouette {
fill: rgba(255, 255, 255, 0.6);
}
/* Card text */
.person-card .person-name {
font-size: 12px;
font-weight: 600;
fill: #212529;
dominant-baseline: auto;
}
.person-card .person-dates {
font-size: 10px;
fill: #6c757d;
dominant-baseline: auto;
}
.person-card .person-subtitle {
font-size: 9px;
fill: #868e96;
font-style: italic;
dominant-baseline: auto;
}
/* ── More ancestors/descendants indicators ── */
.more-ancestors-indicator rect,
.more-descendants-indicator rect {
fill: #dee2e6;
stroke: #adb5bd;
stroke-width: 1;
}
.more-ancestors-indicator line,
.more-descendants-indicator line {
stroke: #adb5bd;
stroke-width: 1.5;
}
.person-card.sex-m .more-ancestors-indicator rect,
.person-card.sex-m .more-descendants-indicator rect {
fill: #c4d9f0;
stroke: #7bafd4;
}
.person-card.sex-f .more-ancestors-indicator rect,
.person-card.sex-f .more-descendants-indicator rect {
fill: #f0c4d9;
stroke: #d47ba8;
}
/* ── Connector lines ── */
.link {
fill: none;
stroke: #adb5bd;
stroke-width: 1.5;
}
.couple-link {
stroke: #868e96;
stroke-width: 2;
}
.ancestor-link {
stroke: #adb5bd;
}
.descendant-link {
stroke: #adb5bd;
}
/* ── Bio card tooltip ── */
.bio-card {
position: absolute;
z-index: 1000;
background: #fff;
border: 1px solid #dee2e6;
border-radius: 8px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
padding: 12px;
min-width: 220px;
max-width: 300px;
font-size: 12px;
color: #212529;
pointer-events: auto;
}
.bio-header {
display: flex;
gap: 10px;
margin-bottom: 8px;
align-items: center;
}
.bio-photo {
width: 50px;
height: 50px;
border-radius: 50%;
object-fit: cover;
flex-shrink: 0;
}
.bio-header-text {
flex: 1;
min-width: 0;
}
.bio-name {
font-weight: 600;
font-size: 14px;
line-height: 1.2;
}
.bio-age {
font-size: 11px;
color: #6c757d;
margin-top: 2px;
}
.bio-facts {
border-top: 1px solid #eee;
padding-top: 6px;
}
.bio-fact {
display: flex;
gap: 6px;
margin-bottom: 3px;
line-height: 1.4;
}
.bio-fact-label {
font-weight: 600;
color: #495057;
white-space: nowrap;
}
.bio-fact-label::after {
content: ":";
}
.bio-fact-value {
color: #6c757d;
}
.bio-link {
display: block;
margin-top: 8px;
padding-top: 6px;
border-top: 1px solid #eee;
color: #4a90d9;
text-decoration: none;
font-size: 11px;
}
.bio-link:hover {
text-decoration: underline;
}
/* ── Zoom controls ── */
.zoom-controls {
position: absolute;
bottom: 12px;
right: 12px;
display: flex;
flex-direction: column;
gap: 4px;
z-index: 10;
}
.zoom-controls button {
width: 32px;
height: 32px;
border: 1px solid #dee2e6;
border-radius: 4px;
background: rgba(255, 255, 255, 0.9);
color: #495057;
font-size: 16px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
padding: 0;
line-height: 1;
}
.zoom-controls button:hover {
background: #e9ecef;
}
/* ── Print styles ── */
@media print {
.full-diagram-container {
border: none;
height: auto !important;
overflow: visible;
}
.zoom-controls {
display: none;
}
}