body {
  background: #fbfbfb;
  background-image: linear-gradient(to bottom, #fff6eb, #fffbf8);
  color: #111;
  font-family: Georgia, serif;
  font-size: 12pt;
  overflow-x: hidden;
  padding: 10px;
  max-width: 800px;
  margin-left: auto;
  margin-right: auto;
}
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
a {
  color: #111;
  text-decoration: none;
}
a:hover {
  text-decoration: underline;
}
h1 {
  margin-top: 20px;
  margin-bottom: 40px;
}
h2, h3 {
  margin-bottom: 5px;
  margin-top: 25px;
}
p {
  margin-top: 0;
  margin-bottom: 1em;
}
img {
  display: block;
  max-width: 100%;
}
label {
  display: block;
  font-size: 10pt;
  margin-bottom: 16px;
}
li:target {
  background-color: #eaf3ff;
}

.map {
  position: relative;
}
.map-small {
  background: #222;
  border-radius: 10px;
  padding: 8px;
  width: 376px;
}
.map-small img {
  max-width: 360px;
}
.map-overlay {
  position: absolute;
  top: 8px;
  bottom: 8px;
  left: 8px;
  right: 8px;
  opacity: 0.5;
  transition: opacity 0.3s;
  cursor: pointer;
}
.map-overlay:hover {
  opacity: 1;
}

/* family tree */
.tree {
  --tree-border: 1px;
  --tree-cell-width: 160px;
  --tree-color: #aaa;
  --tree-padding: 20px;
  padding-bottom: 20px;
}
.tree ul {
  display: flex;
  padding-top: var(--tree-padding);
  position: relative;
  text-align: center;
  white-space: nowrap;
}

.tree li {
  display: inline-block;
  vertical-align: top;
  padding-right: var(--tree-padding);
}
.tree li:last-child {
  padding-right: 0;
}

.tree couple {
  background-color: #fff;
  border: var(--tree-border) solid var(--tree-color);
  display: flex;
  position: relative;
  text-decoration: none;
  width: fit-content;
}

.tree husband, .tree wife {
  overflow: hidden;
  padding: 10px;
  text-overflow: ellipsis;
  width: var(--tree-cell-width);
}
husband {
  background-color: #f4f4ff;
}
wife {
  background-color: #fff4f4;
}

/* right line  */
.tree ul::after {
  border-top: var(--tree-border) dashed var(--tree-color);
  content: '';
  display: none;
  width: calc(100% - 2 * var(--tree-cell-width) - 3 * var(--tree-border));
  left: calc(2 * var(--tree-border) + var(--tree-cell-width) / 2);
  position: absolute;
  top: calc(var(--tree-padding) / 2 - var(--tree-border) / 2);
}
.tree ul ul::after {
  display: block;
}

/* up line */
.tree couple::after {
  border-left: var(--tree-border) dashed var(--tree-color);
  content: '';
  height: calc(var(--tree-padding) / 2);
  left: calc(var(--tree-cell-width) / 2);
  position: absolute;
  top: calc(-1 * var(--tree-border));
  transform: translateY(-100%);
}

.tree li:first-child > couple::after {
  height: calc(var(--tree-padding));
}

.tree ul ul {
  left: 50%;
  transform: translateX(-50%);
}

/* tooltip */
.tooltip {
  position: absolute;
  max-width: 50%;
  padding: 10px;
  background-color: #f9f9f9;
  border: 1px solid #ccc;
  border-radius: 5px;
  box-shadow: 0 15px 45px -10px rgba(0, 0, 0, 0.3);
}

.tooltip-caret {
  transform: rotate(45deg);
  position: absolute;
  width: 12px;
  height: 12px;
  bottom: -6px;
  left: 50%;
  margin-left: -6px;
  background: linear-gradient(to top left, #ccc 50%, rgba(0, 0, 0, 0) 50%);
}

.tooltip-caret::after {
  position: absolute;
  content: "";
  background-color: #f9f9f9;
  width: 11px;
  height: 11px;
}
