/* Ghost Biographer — Life-Arc Viewer page styles
   Page-specific layout and overrides only.
   Shared tokens and components live in design.css. */

/* ── Body / shell ────────────────────────────────── */
body {
  display: flex;
  flex-direction: column;
  height: 100dvh;
  overflow: hidden;
}

/* ── Page sub-header (below nav bar) ────────────── */
#page-header {
  background: var(--paper);
  border-bottom: 1px solid var(--hairline);
  padding: 10px 16px;
  display: flex;
  align-items: center;
  gap: 12px;
  flex-shrink: 0;
}
.page-header-brand {
  display: flex;
  align-items: center;
  gap: 9px;
}
.page-header-icon { font-size: 1.4rem; line-height: 1; }
.page-header-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--ink);
}
.page-header-sub {
  font-size: 11px;
  color: var(--ink-4);
  margin-top: 2px;
}
.header-sep { flex: 1; }

/* ── Info tooltip buttons ────────────────────────── */
.info-btn {
  background: var(--paper-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  color: var(--ink-2);
  font-size: 12px;
  padding: 5px 10px;
  cursor: pointer;
  position: relative;
  transition: background 100ms, border-color 100ms, color 100ms;
}
.info-btn:hover {
  background: oklch(0.95 0.04 295);
  border-color: var(--plum-3);
  color: var(--plum);
}
.info-btn .tooltip-panel {
  display: none;
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  width: 280px;
  background: var(--paper);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  padding: 12px 14px;
  z-index: 200;
  text-align: left;
  box-shadow: var(--shadow-lg);
  font-size: 12px;
  line-height: 1.55;
  color: var(--ink-2);
}
.info-btn:hover .tooltip-panel,
.info-btn:focus-within .tooltip-panel { display: block; }
.tooltip-panel h4 {
  font-size: 13px;
  font-weight: 700;
  color: var(--ink);
  margin-bottom: 6px;
}
.tooltip-panel p  { margin-bottom: 6px; color: var(--ink-2); }
.tooltip-panel a  { color: var(--plum); text-decoration: none; }
.tooltip-panel a:hover { text-decoration: underline; }

/* ── Tabs ────────────────────────────────────────── */
#tabs {
  display: flex;
  border-bottom: 1px solid var(--hairline);
  background: var(--paper);
  flex-shrink: 0;
  padding: 0 16px;
}
.tab-btn {
  padding: 10px 18px;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink-3);
  background: none;
  border: none;
  cursor: pointer;
  border-bottom: 2px solid transparent;
  transition: color 150ms, border-color 150ms;
  position: relative;
}
.tab-btn:hover { color: var(--ink); }
.tab-btn.active { color: var(--plum); border-bottom-color: var(--plum); }
.tab-btn .tab-tooltip {
  display: none;
  position: absolute;
  top: calc(100% + 4px);
  left: 50%;
  transform: translateX(-50%);
  width: 240px;
  background: var(--paper);
  border: 1px solid var(--hairline);
  border-radius: 7px;
  padding: 10px 12px;
  z-index: 200;
  box-shadow: var(--shadow-lg);
  font-size: 12px;
  line-height: 1.5;
  color: var(--ink-2);
  font-weight: 400;
  text-align: left;
}
.tab-btn:hover .tab-tooltip { display: block; }
.tab-tooltip h5 { font-size: 12px; font-weight: 700; color: var(--ink); margin-bottom: 4px; }

/* ── Toolbar ─────────────────────────────────────── */
#toolbar {
  padding: 6px 12px;
  display: flex;
  align-items: center;
  gap: 6px;
  border-bottom: 1px solid var(--hairline);
  background: var(--paper-2);
  flex-shrink: 0;
  flex-wrap: wrap;
}
.stat-chip {
  font-size: 11px;
  color: var(--ink-3);
  background: var(--paper);
  border: 1px solid var(--hairline);
  border-radius: 5px;
  padding: 3px 8px;
  white-space: nowrap;
}
.stat-chip span { color: var(--plum); font-weight: 700; }
.toolbar-sep { flex: 1; }
#search-input {
  background: var(--paper);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  color: var(--ink);
  padding: 5px 9px;
  font-size: 12px;
  width: 180px;
  font-family: inherit;
  outline: none;
}
#search-input:focus { border-color: var(--plum); }
.btn-ghost {
  background: var(--paper);
  color: var(--ink-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  font-size: 12px;
  padding: 5px 10px;
  cursor: pointer;
  transition: background 100ms, border-color 100ms, color 100ms;
}
.btn-ghost:hover {
  background: oklch(0.95 0.04 295);
  border-color: var(--plum-3);
  color: var(--plum);
}

/* ── Body: sidebar + graph ───────────────────────── */
#body { display: flex; flex: 1; overflow: hidden; min-height: 0; }

/* ── Sidebar ─────────────────────────────────────── */
#sidebar {
  width: 260px;
  flex-shrink: 0;
  background: var(--paper-2);
  border-right: 1px solid var(--hairline);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.sidebar-section {
  padding: 8px 14px 6px;
  font-size: 10px;
  font-weight: 600;
  color: var(--ink-4);
  text-transform: uppercase;
  letter-spacing: .06em;
  border-top: 1px solid var(--hairline);
  flex-shrink: 0;
}
.sidebar-section:first-child { border-top: none; }
#legend {
  padding: 4px 10px 8px;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  gap: 5px;
  flex-shrink: 0;
}
.legend-item {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 12px;
  color: var(--ink-2);
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 5px;
  transition: background 100ms, color 100ms;
}
.legend-item:hover { background: oklch(0.95 0.04 295); color: var(--plum); }
.legend-item.active { background: oklch(0.95 0.04 295); color: var(--plum); }
.legend-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
  border: 2px solid;
}
.legend-count { color: var(--ink-4); margin-left: auto; font-size: 11px; }
#detail-pane {
  flex: 1;
  overflow-y: auto;
  padding: 10px 14px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.hint { font-size: 12px; color: var(--ink-4); font-style: italic; }
.detail-label {
  font-size: 15px;
  font-weight: 700;
  color: var(--ink);
  line-height: 1.3;
  word-break: break-word;
}
.detail-type {
  display: inline-block;
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .05em;
  padding: 2px 9px;
  border-radius: 99px;
  margin-bottom: 3px;
}
.prop-row { font-size: 12px; display: flex; flex-direction: column; gap: 2px; margin-top: 4px; }
.prop-key { color: var(--ink-4); font-size: 10px; text-transform: uppercase; letter-spacing: .04em; }
.prop-val { color: var(--ink); white-space: pre-wrap; word-break: break-word; line-height: 1.45; }

/* ── Graph canvas ────────────────────────────────── */
#graph { flex: 1; position: relative; overflow: hidden; background: var(--paper); }
#life-arc-network,
#history-arc-frame { width: 100%; height: 100%; display: block; }
#history-arc-frame { border: none; }

#loading {
  position: absolute;
  inset: 0;
  background: oklch(0.98 0.01 270 / 0.85);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 50;
  font-size: 13px;
  color: var(--plum);
  gap: 8px;
  letter-spacing: .03em;
}
#loading.hidden { display: none; }

/* ── Spinner ─────────────────────────────────────── */
.spinner {
  width: 16px; height: 16px;
  border: 2px solid var(--hairline);
  border-top-color: var(--plum);
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ── Auth overlay (session-expiry fallback) ──────── */
#auth-overlay {
  position: fixed;
  inset: 0;
  background: oklch(0.98 0.01 270 / 0.95);
  z-index: 300;
  display: none;
  align-items: center;
  justify-content: center;
}
#auth-overlay.visible { display: flex; }
.auth-box {
  background: var(--paper);
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  box-shadow: var(--shadow-lg);
  padding: 32px;
  width: 360px;
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.auth-box h2 { font-size: 17px; font-weight: 700; color: var(--ink); }
.auth-box p  { font-size: 13px; color: var(--ink-3); }
.auth-box a  { color: var(--plum); text-decoration: none; font-weight: 600; }
.auth-box a:hover { text-decoration: underline; }

/* ── Inline styles extracted from template ─── */
#legend, #edge-filters { display:flex; flex-wrap:wrap; gap:5px; padding:4px 0 8px; }
      .type-pill {
        display:inline-flex; align-items:center; gap:5px;
        padding:6px 13px; border-radius:999px; cursor:pointer; font-size:.82rem;
        font-weight:700;
        background:color-mix(in oklch, var(--pc) 14%, white);
        border:2px solid var(--pc); color:var(--pc);
        transition:opacity .15s, background .15s;
        user-select:none;
      }
      .type-pill:hover { background:color-mix(in oklch, var(--pc) 24%, white); }
      .type-pill.dimmed { opacity:.3; }
      .type-pill .pill-count {
        font-size:.78rem; font-weight:700;
      }
      .ctrl-btn { font-size:.7rem !important; padding:3px 8px !important; font-weight:600 !important; }
#person-modal, #org-modal {
    display:none; position:fixed; inset:0; background:rgba(0,0,0,.72); z-index:9000;
    align-items:center; justify-content:center;
  }
  #person-modal.open, #org-modal.open { display:flex; }
  .person-modal-box {
    background:var(--paper); border:1px solid var(--plum);
    border-radius:12px; padding:20px; max-width:min(540px,92vw); width:100%;
    position:relative; display:flex; flex-direction:column; gap:10px;
    max-height:90vh; overflow-y:auto;
  }
  .pm-header { display:flex; align-items:center; gap:10px; margin-top:4px; }
  .pm-badge {
    font-size:.7rem; font-weight:700; padding:3px 8px; border-radius:999px;
    background:var(--plum-bg); color:var(--plum-ink);
    border:1px solid var(--plum-3); white-space:nowrap;
  }
  .pm-name-input {
    flex:1; background:var(--paper-2); color:var(--ink);
    border:1.5px solid var(--plum); border-radius:8px;
    padding:7px 12px; font-size:1.05rem; font-weight:600;
  }
  .pm-fields { display:flex; flex-direction:column; gap:6px; }
  .pm-label { font-size:.72rem; font-weight:600; color:var(--ink-2); margin-bottom:2px; display:block; }
  .pm-input, .pm-select, .pm-textarea {
    width:100%; background:var(--paper-2); color:var(--ink);
    border:1px solid var(--hairline); border-radius:6px;
    padding:6px 10px; font-size:.85rem; box-sizing:border-box;
  }
  .pm-input:focus, .pm-select:focus, .pm-textarea:focus, .pm-name-input:focus {
    outline:none; border-color:var(--plum);
  }
  .pm-textarea { resize:vertical; min-height:64px; }
  .pm-row { display:flex; gap:10px; }
  .pm-extra {
    font-size:.75rem; color:var(--ink-2);
    background:var(--paper-2); border-radius:6px; padding:8px 10px;
    display:none;
  }
  .pm-extra.has-props { display:block; }
  .pm-extra-row { display:flex; gap:6px; margin-bottom:3px; }
  .pm-extra-key { color:var(--ink-3); min-width:90px; flex-shrink:0; }
  .pm-extra-val { color:var(--ink); word-break:break-word; }
  .pm-actions { display:flex; align-items:center; gap:8px; }
  .pm-status { font-size:.75rem; color:var(--sage,#059669); margin-left:4px; }
  /* ── Representative face picker ── */
  .pm-face-section { display:flex; align-items:center; gap:10px; }
  .pm-face-current {
    width:44px; height:44px; border-radius:50%; object-fit:cover;
    border:2px solid var(--plum); flex-shrink:0; background:var(--paper-3);
  }
  .pm-face-placeholder {
    width:44px; height:44px; border-radius:50%; background:var(--paper-3);
    border:2px dashed var(--hairline); flex-shrink:0;
    display:flex; align-items:center; justify-content:center;
    font-size:1.2rem; color:var(--ink-4);
  }
  .pm-face-info { flex:1; font-size:.75rem; color:var(--ink-3); }
  .pm-face-grid {
    display:none; flex-wrap:wrap; gap:6px; padding:8px;
    background:var(--paper-2); border-radius:8px; border:1px solid var(--hairline);
    max-height:140px; overflow-y:auto;
  }
  .pm-face-grid.open { display:flex; }
  .pm-face-chip {
    width:44px; height:44px; border-radius:50%; object-fit:cover; cursor:pointer;
    border:2px solid transparent; transition:border-color 120ms;
    flex-shrink:0;
  }
  .pm-face-chip:hover { border-color:var(--plum-3); }
  .pm-face-chip.selected { border-color:var(--plum); box-shadow:0 0 0 2px var(--plum-bg); }
  /* ── Reconcile section ── */
  .pm-reconcile {
    border:1px solid var(--hairline); border-radius:8px;
    background:var(--paper-2); overflow:hidden;
  }
  .pm-reconcile-summary {
    cursor:pointer; padding:8px 12px; font-size:.78rem;
    font-weight:600; color:var(--ink-2); list-style:none; user-select:none;
  }
  .pm-reconcile-summary:hover { color:var(--ink); }
  .pm-reconcile-summary::marker, .pm-reconcile-summary::-webkit-details-marker { display:none; }
  .pm-reconcile-summary::before { content:'▶ '; font-size:.65rem; }
  details.pm-reconcile[open] .pm-reconcile-summary::before { content:'▼ '; }
  .pm-reconcile-body { padding:10px 12px; display:flex; flex-direction:column; gap:8px; }
  .pm-reconcile-actions { display:flex; gap:8px; }
  .btn-warn {
    background:var(--amber-bg, #fef3c7); color:var(--amber-ink, #92400e);
    border:1px solid var(--amber-3, #f59e0b); border-radius:6px;
    padding:5px 12px; font-size:.8rem; font-weight:600; cursor:pointer;
  }
  .btn-warn:hover { background:var(--amber-3, #f59e0b); color:#fff; }
#media-modal {
    display:none; position:fixed; inset:0; background:rgba(0,0,0,.72); z-index:9000;
    align-items:center; justify-content:center;
  }
  #media-modal.open { display:flex; }
  .media-modal-box {
    background:var(--paper-1, #1a1a2e); border:1px solid var(--plum, #7c3aed);
    border-radius:12px; padding:20px; max-width:min(520px,90vw);
    width:100%; position:relative; display:flex; flex-direction:column; gap:12px;
  }
  .media-modal-close {
    position:absolute; top:10px; right:14px; background:none; border:none;
    color:var(--ink-2, #94a3b8); font-size:1.4rem; cursor:pointer; line-height:1;
  }
  .media-modal-close:hover { color:#fff; }
  #media-modal-img-wrap {
    display:flex; justify-content:center; align-items:center;
    background:#000; border-radius:8px; overflow:hidden; min-height:160px;
  }
  #media-modal-img { max-width:100%; max-height:360px; object-fit:contain; display:block; }
  #media-modal-title { font-weight:700; font-size:1rem; color:var(--text-1, #e2e8f0); }
  #media-modal-sub { font-size:.8rem; color:var(--ink-2, #94a3b8); margin-top:2px; }
  .disambig-label { font-size:.82rem; font-weight:700; color:#e2e8f0; margin-top:4px; }
  .disambig-row { display:flex; gap:8px; align-items:center; margin-top:6px; }
  .disambig-row select {
    flex:1; background:#1e293b; color:#e2e8f0;
    border:1px solid #7c3aed; border-radius:6px; padding:6px 8px; font-size:.85rem;
  }
  #face-new-person-row input {
    background:#1e293b; color:#e2e8f0;
    border:1px solid #7c3aed; border-radius:6px; padding:6px 8px;
    font-size:.85rem; width:100%; box-sizing:border-box;
  }
  #face-new-person-row input::placeholder { color:#94a3b8; }
  #disambig-status { font-size:.78rem; margin-top:4px; color:#34d399; }
  .btn-sm { padding:5px 12px; font-size:.8rem; }
#edge-ctx-menu {
    display:none; position:fixed; z-index:9500;
    background:var(--paper); border:1px solid var(--hairline);
    border-radius:8px; box-shadow:0 4px 16px rgba(0,0,0,.18);
    padding:4px 0; min-width:200px;
  }
  #edge-ctx-menu.open { display:block; }
  .edge-ctx-label {
    padding:6px 14px 4px; font-size:.72rem; font-weight:700;
    color:var(--ink-3); text-transform:uppercase; letter-spacing:.04em;
    border-bottom:1px solid var(--hairline); margin-bottom:2px;
  }
  .edge-ctx-item {
    padding:8px 14px; font-size:.82rem; cursor:pointer;
    color:var(--ink); user-select:none;
  }
  .edge-ctx-item:hover { background:var(--paper-2); }
  .edge-ctx-warn { color:var(--amber-ink,#92400e); font-weight:600; }
  .edge-ctx-warn:hover { background:var(--amber-bg,#fef3c7); }
