/*
 * 테이블 계보 탭(database-explorer.html #lineage) 스타일입니다.
 * 색은 style.css 의 var() 토큰을 쓰고, 칸 테두리 색만 다크 모드에서 밝게 바꿉니다.
 */
.lin-alert { border-left: 3px solid var(--warning); background: rgba(245, 158, 11, 0.08); padding: 0.45rem 0.7rem; font-size: 0.85rem; margin-bottom: 0.6rem; border-radius: 6px; color: var(--text-secondary); }
.lin-summary { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; margin-bottom: 0.8rem; }
.lin-summary:empty { display: none; }
.lin-sum-btn { display: inline-flex; align-items: center; gap: 0.35rem; border: 1px solid var(--border-color); background: var(--bg-secondary); color: var(--text-primary); border-radius: 8px; padding: 0.3rem 0.7rem; font: inherit; font-size: 0.85rem; cursor: pointer; }
.lin-sum-btn:hover { border-color: var(--primary); }
.lin-sum-btn.on { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.25); }
.lin-sum-manual { font-size: 0.85rem; color: var(--text-muted); margin-left: 0.3rem; }

.lin-card:hover, .lin-detail:hover { transform: none; }
.lin-graph { overflow-x: auto; }
/* 칸 위 층 띠(원천·데이터 웨어하우스·데이터 마트). 수집 작업·화면 칸 위는 비웁니다. */
.lin-layers { position: relative; height: 1.5rem; margin-bottom: 0.25rem; }
.lin-layer { position: absolute; top: 0; box-sizing: border-box; height: 1.4rem; line-height: 1.4rem; padding: 0 0.5rem; border-radius: 6px; background: var(--bg-tertiary); color: var(--text-secondary); font-size: 0.78rem; font-weight: 600; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: help; }
.lin-layer-tag { margin-left: 0.4rem; padding: 0.05rem 0.45rem; border-radius: 6px; background: var(--bg-tertiary); color: var(--text-secondary); font-size: 0.75rem; font-weight: 600; }
.lin-layer:focus-visible, .lin-layer-tag:focus-visible, .lin-sum-manual:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.lin-heads { position: relative; height: 1.6rem; margin-bottom: 0.4rem; }
.lin-head { position: absolute; top: 0; font-weight: 700; font-size: 0.9rem; color: var(--text-secondary); }
.lin-canvas { position: relative; }
.lin-svg { position: absolute; left: 0; top: 0; overflow: visible; pointer-events: none; }
.lin-edge { fill: none; stroke: var(--text-muted); stroke-width: 1.2; opacity: 0.35; transition: opacity 0.15s, stroke 0.15s; }

.lin-box { position: absolute; display: flex; align-items: center; gap: 0.4rem; box-sizing: border-box; padding: 0 0.6rem; border: 1.5px solid var(--border-color); border-radius: 8px; background: var(--bg-secondary); color: var(--text-primary); font: inherit; font-size: 0.82rem; text-align: left; cursor: pointer; overflow: hidden; transition: opacity 0.15s, box-shadow 0.15s; }
.lin-box:hover { box-shadow: var(--shadow-sm); }
.lin-label { flex: 1 1 auto; min-width: 0; font-weight: 600; white-space: normal; overflow-wrap: anywhere; line-height: 1.15; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.lin-sub { flex: 0 0 auto; font-size: 0.72rem; color: var(--text-muted); white-space: nowrap; }
.lin-k-source { border-color: #0f766e; }
.lin-k-job { border-color: #c2410c; }
.lin-k-collected { border-color: #2563eb; }
.lin-k-manual, .lin-k-group { border-color: #64748b; border-style: dashed; }
.lin-k-derived { border-color: #7c3aed; }
.lin-k-page { border-color: #be123c; }
[data-theme="dark"] .lin-k-source { border-color: #2dd4bf; }
[data-theme="dark"] .lin-k-job { border-color: #fb923c; }
[data-theme="dark"] .lin-k-collected { border-color: #60a5fa; }
[data-theme="dark"] .lin-k-manual, [data-theme="dark"] .lin-k-group { border-color: #94a3b8; }
[data-theme="dark"] .lin-k-derived { border-color: #a78bfa; }
[data-theme="dark"] .lin-k-page { border-color: #fb7185; }

/* 상태 점(초록 정상·빨강 실패·회색 오래됨·기록 없음)과 기준 표 표시 */
.lin-dot { flex: 0 0 auto; display: inline-block; width: 9px; height: 9px; border-radius: 50%; }
.lin-ok { background: var(--success); }
.lin-fail { background: var(--danger); }
.lin-stale, .lin-none { background: #94a3b8; }
.lin-tag { flex: 0 0 auto; font-size: 0.68rem; color: var(--text-muted); border: 1px solid var(--border-color); border-radius: 4px; padding: 0 0.25rem; }

/* 누른 상자·요약 숫자에 이어진 것만 진하게 */
.lin-focus .lin-box { opacity: 0.25; }
.lin-focus .lin-box.on { opacity: 1; box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.35); }
.lin-focus .lin-edge { opacity: 0.06; }
.lin-focus .lin-edge.on { opacity: 1; stroke: var(--primary); stroke-width: 2; }

/* 상세 카드 */
.lin-detail { margin-top: 1rem; }
.lin-detail.hidden { display: none; }
.lin-detail .card-header { display: flex; align-items: center; justify-content: space-between; gap: 0.6rem; }
.lin-close { appearance: none; border: 1px solid var(--border-color); background: transparent; color: inherit; border-radius: 8px; padding: 0.25rem 0.7rem; font: inherit; font-size: 0.85rem; cursor: pointer; }
.lin-detail a { color: var(--primary-dark); }
[data-theme="dark"] .lin-detail a { color: #60a5fa; }
.lin-kind { font-size: 0.78rem; color: var(--text-muted); font-weight: 500; margin-left: 0.5rem; }
.lin-desc { margin: 0 0 0.3rem; }
.lin-cat { margin: 0; font-size: 0.85rem; }
.lin-dl { display: grid; grid-template-columns: 9rem 1fr; gap: 0.45rem 1rem; margin: 0.8rem 0 0; font-size: 0.88rem; }
.lin-dl dt { color: var(--text-muted); font-weight: 600; }
.lin-dl dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.lin-dl ul { margin: 0; padding-left: 1.1rem; }
.lin-status { display: inline-flex; align-items: center; gap: 0.35rem; }

/* 설명 창(마우스를 올리면) */
.lin-tip { position: fixed; z-index: 9999; display: none; max-width: 340px; background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border-color); border-radius: 8px; padding: 0.5rem 0.7rem; font-size: 0.82rem; line-height: 1.45; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.12); pointer-events: none; white-space: normal; }
.lin-tip b { display: block; margin-bottom: 2px; }
.lin-tip span { display: block; }
.lin-tip .f { display: block; margin-top: 4px; color: var(--text-muted); }

/* 휴대폰 목록(선 대신 이어지는 곳) */
.lin-list-col { margin-bottom: 1rem; }
.lin-list-col h4 { font-size: 0.95rem; margin: 0 0 0.4rem; }
.lin-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.45rem; }
.lin-list .lin-box { position: static; width: 100%; height: 36px; }
.lin-next { font-size: 0.78rem; color: var(--text-muted); margin: 0.2rem 0 0 0.3rem; overflow-wrap: anywhere; }
@media (max-width: 640px) {
    .lin-dl { grid-template-columns: 1fr; gap: 0.15rem; }
    .lin-dl dd { margin-bottom: 0.5rem; }
}

/* 상세 카드 제목 줄 버튼 묶음(데이터 보기·닫기) */
.lin-actions { display: flex; align-items: center; gap: 0.4rem; }

/* 데이터 탐색 탭의 수집 일정 표(schedule.js): 실패한 실행, 불러오기 실패 줄 */
.dbx-run.fail { color: var(--danger); }
.dbx-cron-error { color: var(--text-secondary); padding: 0.8rem; }
