* {
  box-sizing: border-box;
}

body {
  min-width: 900px;
  margin: 0;
  background: var(--paper);
}

button,
input,
select,
textarea {
  font: inherit;
}

button {
  padding: 9px 14px;
  border: 1px solid var(--line-strong);
  border-radius: 6px;
  background: var(--button);
  box-shadow: 0 1px 1px var(--shadow);
  color: inherit;
  font-size: 12px;
  font-weight: 650;
  cursor: pointer;

  &:hover {
    border-color: var(--accent);
    background: var(--button-hover);
  }

  &.primary {
    border-color: var(--accent);
    background: var(--accent);
    color: var(--button-hover);

    &:hover {
      background: var(--accent-dark);
    }
  }

  &.ghost {
    background: transparent;
  }
}

main.editor {
  display: grid;
  grid-template-rows: 46px minmax(0, 1fr);
  height: 100vh;

  > header {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 0 328px 0 8px;
    border-bottom: 1px solid var(--line);
    background: var(--panel);

    > .menu {
      position: relative;
      flex: none;

      > .trigger {
        display: grid;
        place-content: center;
        gap: 3px;
        width: 30px;
        height: 30px;
        padding: 0;

        span {
          width: 14px;
          height: 2px;
          border-radius: 1px;
          background: var(--accent-dark);
        }
      }

      > nav {
        position: absolute;
        top: 35px;
        left: 0;
        z-index: 30;
        display: grid;
        gap: 4px;
        width: 170px;
        padding: 7px;
        border: 1px solid var(--line);
        border-radius: 7px;
        background: var(--panel);
        box-shadow: 0 10px 28px var(--shadow-strong);

        button {
          width: 100%;
          padding: 7px 9px;
          border-color: transparent;
          background: transparent;
          box-shadow: none;
          text-align: left;
          font-size: 10px;

          &:hover {
            background: var(--panel-hover);
          }
        }

        h3 {
          display: flex;
          align-items: center;
          gap: 8px;
          margin: 3px 2px 0;
          color: var(--muted);
          font: 700 8px sans-serif;
          text-transform: uppercase;
          letter-spacing: 0.12em;

          &::before,
          &::after {
            flex: 1;
            height: 1px;
            background: var(--line);
            content: "";
          }
        }

        input[type="file"] {
          display: none;
        }
      }
    }

    > input {
      order: 1;
      width: min(36vw, 420px);
      padding: 4px 2px;
      border: 0;
      outline: 0;
      background: transparent;
      color: var(--ink);
      font:
        600 16px Georgia,
        serif;
    }

    > .sheet-tabs {
      position: absolute;
      left: calc((100% - 310px) / 2);
      display: flex;
      align-items: center;
      gap: 3px;
      max-width: min(44vw, 620px);
      padding: 3px;
      overflow-x: auto;
      transform: translateX(-50%);
      scrollbar-width: none;

      &::-webkit-scrollbar {
        display: none;
      }

      button {
        flex: none;
        min-width: 54px;
        padding: 5px 9px;
        border-color: transparent;
        background: transparent;
        box-shadow: none;
        color: var(--muted);
        font-size: 9px;

        &.active {
          border-color: var(--accent);
          background: var(--accent-soft);
          color: var(--accent-dark);
        }

      }
    }

    > .add {
      order: 2;
      margin-left: auto;
      padding: 6px 10px;
      font-size: 10px;
    }

    > .arrange {
      order: 3;
      padding: 6px 10px;
      font-size: 10px;
    }
  }

  > div {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 310px;
    min-height: 0;

    > section {
      position: relative;
      display: flex;
      flex-direction: column;
      min-width: 0;
      min-height: 0;

      > .canvas-zoom {
        position: absolute;
        top: 12px;
        right: 14px;
        z-index: 15;
        display: grid;
        grid-template-columns: auto 112px 34px;
        align-items: center;
        gap: 7px;
        padding: 4px 2px;
        color: var(--muted);
        font-size: 8px;
        font-weight: 750;
        text-transform: uppercase;
        letter-spacing: 0.08em;
        filter: drop-shadow(0 1px 1px var(--panel));

        input {
          width: 112px;
          margin: 0;
          accent-color: var(--accent);
          cursor: pointer;
        }

        output {
          color: var(--ink);
          font-size: 9px;
          text-align: right;
        }
      }

      > .canvas-viewport {
        position: relative;
        flex: 1;
        min-height: 0;
        overflow: auto;
        overscroll-behavior: contain;
        scrollbar-width: none;
        background: var(--canvas-frame);

        &::-webkit-scrollbar {
          display: none;
        }

        > div {
          position: relative;
          min-width: 100%;
          min-height: 100%;
          background-color: var(--canvas-paper);
          background-image: radial-gradient(
            circle,
            var(--grid) 1.25px,
            transparent 1.4px
          );
          background-size: 24px 24px;
          background-position: 12px 12px;

          > svg,
          > div {
            position: absolute;
            inset: 0;
          }

          > svg {
            z-index: 0;
            overflow: visible;
            pointer-events: none;

            marker path {
              fill: var(--relation-parent);
              stroke: none;
            }

            .relation {
              fill: none;
              stroke-width: 2;

              &.parent {
                stroke: var(--relation-parent);
              }

              &.co-parent {
                stroke: var(--relation-parent);
                stroke-dasharray: 7 6;
              }

              &.marriage {
                stroke: var(--relation-marriage);
                stroke-width: 3;
              }

              &.former-marriage {
                stroke: var(--relation-marriage);
                stroke-width: 3;
                stroke-dasharray: 7 6;
              }
            }
          }

          > .layout-debug-arrows {
            z-index: 3;

            line {
              fill: none;
              stroke: var(--debug-arrow);
              stroke-width: 3;
              stroke-linecap: round;
              stroke-dasharray: 7 5;
            }

            marker path {
              fill: var(--debug-arrow);
            }
          }

          > .selection-marquee {
            z-index: 12;
            border: 1px solid var(--accent);
            border-radius: 3px;
            background: color-mix(in srgb, var(--accent) 16%, transparent);
            box-shadow: 0 0 0 1px color-mix(in srgb, var(--panel) 65%, transparent) inset;
            pointer-events: none;
          }

          > div {
            z-index: 1;
            right: auto;
            bottom: auto;
            width: 0;
            height: 0;
            pointer-events: none;

            &.layout-debug {
              z-index: 2;

              > div {
                position: absolute;
                border: 1px dashed var(--debug-block);
                background: var(--debug-block-bg);
                color: var(--debug-block-ink);

                &.family {
                  border-color: var(--debug-family);
                  background: var(--debug-family-bg);
                  color: var(--debug-family-ink);
                }

                &.fallback {
                  border-color: var(--debug-fallback);
                  background: var(--debug-fallback-bg);
                  color: var(--debug-fallback-ink);
                }

                &.move-before {
                  border-color: var(--debug-before);
                  background: var(--debug-before-bg);
                  color: var(--debug-before-ink);
                }

                &.move-after {
                  border: 2px solid var(--debug-after);
                  background: var(--debug-after-bg);
                  color: var(--debug-after-ink);
                  box-shadow: 0 3px 10px var(--debug-after-shadow);
                }

                > span {
                  position: absolute;
                  top: -16px;
                  left: 2px;
                  padding: 1px 4px;
                  border-radius: 3px;
                  background: var(--header-glass);
                  font:
                    600 9px/1.3 system-ui,
                    sans-serif;
                  white-space: nowrap;
                }
              }
            }

            > .person {
              position: absolute;
              top: 0;
              left: 0;
              display: flex;
              align-items: flex-start;
              gap: 12px;
              width: 288px;
              height: 72px;
              min-height: 72px;
              padding: 9px 12px;
              overflow: hidden;
              transform: translate(var(--node-x), var(--node-y));
              border: 1px solid var(--line-strong);
              border-radius: 8px;
              background: var(--card);
              box-shadow: 0 3px 10px var(--shadow);
              text-align: left;
              pointer-events: auto;
              cursor: grab;
              user-select: none;
              touch-action: none;
              transition:
                width 120ms ease,
                border-color 180ms ease,
                box-shadow 180ms ease;

              .detail-sheet-marker {
                position: absolute;
                top: 5px;
                right: 7px;
                display: inline-flex;
                align-items: center;
                gap: 1px;
                color: var(--success);
                font-size: 10px;
                font-weight: 850;
                line-height: 1;
              }

              &.deceased {
                border-color: var(--card-deceased-border);
                background-color: var(--card-deceased);
                background-image: repeating-linear-gradient(
                  135deg,
                  transparent 0,
                  transparent 7px,
                  var(--deceased-stripe) 7px,
                  var(--deceased-stripe) 9px
                );
              }

              &:hover {
                z-index: 10;
                border-color: var(--accent);
                background-color: var(--card-hover);
                box-shadow: 0 5px 15px var(--shadow-strong);
              }

              &.deceased:hover {
                background-color: var(--card-deceased);
              }

              &.selected {
                border-color: var(--accent);
                outline: 3px solid color-mix(in srgb, var(--accent) 36%, transparent);
              }

              &:active {
                cursor: grabbing;
              }

              .avatar {
                display: grid;
                flex: none;
                place-items: center;
                width: 40px;
                height: 40px;
                border-radius: 50%;
                background: var(--avatar-neutral);
                color: var(--avatar-neutral-ink);
                font:
                  600 18px Georgia,
                  serif;
              }

              &.female .avatar {
                background: var(--avatar-female);
                color: var(--avatar-female-ink);
              }

              &.male .avatar {
                background: var(--avatar-male);
                color: var(--avatar-male-ink);
              }

              .copy {
                display: flex;
                flex: 1;
                flex-direction: column;
                gap: 4px;
                min-width: 0;

                strong {
                  overflow: hidden;
                  font:
                    600 15px Georgia,
                    serif;
                  text-overflow: ellipsis;
                  white-space: nowrap;
                }

                .secondary {
                  overflow: hidden;
                  color: var(--muted);
                  font:
                    500 11px Georgia,
                    serif;
                  text-overflow: ellipsis;
                  white-space: nowrap;
                }

                small {
                  color: var(--muted);
                  font-size: 10px;
                  line-height: 1.35;
                }

                .meta {
                  display: flex;
                  align-items: baseline;
                  justify-content: space-between;
                  gap: 10px;
                  min-width: 0;

                  .place {
                    overflow: hidden;
                    min-width: 0;
                    text-align: right;
                    text-overflow: ellipsis;
                    white-space: nowrap;
                  }

                  .dates {
                    flex: none;
                    white-space: nowrap;
                  }
                }
              }
            }
          }
        }
      }

      > .layout-debug-timeline {
        position: relative;
        flex: none;
        z-index: 20;
        display: grid;
        grid-template-columns: 90px minmax(0, 1fr) auto;
        align-items: center;
        gap: 18px;
        min-height: 88px;
        height: 88px;
        padding: 10px 16px;
        overflow: visible;
        border-top: 1px solid var(--line-strong);
        background: var(--timeline-glass);
        box-shadow: 0 -8px 24px var(--shadow);

        .layout-debug-title {
          display: grid;
          gap: 3px;

          strong {
            font:
              700 12px/1.2 system-ui,
              sans-serif;
          }

          span {
            overflow: hidden;
            color: var(--muted);
            font-size: 10px;
            text-overflow: ellipsis;
            white-space: nowrap;
          }
        }

        .layout-debug-steps {
          display: flex;
          gap: 5px;
          min-width: 0;
          padding: 4px 0 8px;
          overflow-x: auto;
          overflow-y: hidden;
          scrollbar-color: var(--muted) transparent;
          scrollbar-width: thin;

          &::-webkit-scrollbar {
            height: 7px;
          }

          &::-webkit-scrollbar-thumb {
            border-radius: 999px;
            background: var(--muted);
          }

          &::-webkit-scrollbar-track {
            background: transparent;
          }

          button {
            flex: 0 0 30px;
            min-width: 30px;
            height: 30px;
            padding: 0;
            border-radius: 999px;
            color: var(--muted);
            font-size: 10px;

            &.active {
              border-color: var(--accent);
              background: var(--accent);
              color: var(--button-hover);
              box-shadow: 0 2px 7px var(--shadow-strong);
            }
          }
        }

        .layout-debug-legend {
          display: flex;
          gap: 10px;
          color: var(--muted);
          font-size: 9px;

          span::before {
            display: inline-block;
            width: 8px;
            height: 8px;
            margin-right: 4px;
            border-radius: 2px;
            content: "";
          }

          .previous::before {
            border: 1px dashed var(--debug-before);
          }

          .current::before {
            background: var(--debug-after);
          }

          .movement::before {
            width: 12px;
            height: 2px;
            background: var(--debug-arrow);
            vertical-align: middle;
          }
        }
      }
    }
  }
}
