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.
279 lines
4.7 KiB
CSS
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;
|
|
}
|
|
}
|