/* 关系族谱：分层关系图。自包含深色主题，不依赖外部资源。 */
:root{color-scheme:dark;--bg:#090a0a;--panel:#151817;--panel2:#1c211f;--panel3:#232a27;--line:#2d3531;--line2:#46514b;--ink:#f4f7f3;--ink2:#b7c0ba;--ink3:#8f9c95;--lime:#b8fa5c;--ok:#b8fa5c;--warn:#f0ce89;--bad:#ff9aab;--blue:#7fc4ff}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);font:14px/1.65 Inter,'Microsoft YaHei','PingFang SC',sans-serif;min-height:100vh}
a{color:inherit}
.topbar{display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding:14px 22px;border-bottom:1px solid var(--line);background:var(--panel);position:sticky;top:0;z-index:20}
.back{color:var(--ink2);text-decoration:none;font-size:13px;border:1px solid var(--line2);border-radius:20px;padding:7px 13px}
.back:hover{color:var(--ink);border-color:var(--ink3)}
.brand{display:flex;align-items:center;gap:9px;font-weight:650;font-size:16px}
.brand .dot{width:10px;height:10px;border-radius:50%;background:var(--lime);display:inline-block}
.top-actions{margin-left:auto;display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.top-actions .generated{font-size:12px;color:var(--ink3);margin-right:4px}
button{font:inherit;cursor:pointer}
.btn{background:var(--panel3);border:1px solid var(--line2);color:var(--ink);border-radius:20px;padding:7px 14px;font-size:12.5px;min-height:34px}
.btn:hover{border-color:var(--ink3);background:var(--panel2)}
.btn.primary{background:var(--lime);border-color:var(--lime);color:#15200a;font-weight:650}
.btn.primary:hover{filter:brightness(1.05)}
main{max-width:1580px;margin:0 auto;padding:26px 22px 70px}
.intro h1{font-size:30px;letter-spacing:-.6px;margin:0 0 4px;font-weight:750}
.intro p{margin:0;color:var(--ink2);max-width:900px}
.intro .caveat{color:var(--ink3);font-size:12.5px;margin-top:6px;border-left:2px solid var(--line2);padding-left:10px}
.stats{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0 6px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:13px;padding:9px 14px;display:flex;align-items:baseline;gap:8px}
.stat strong{font-size:21px;font-weight:500;font-variant-numeric:tabular-nums;color:var(--ink)}
.stat span{font-size:12px;color:var(--ink2)}
.board{display:grid;grid-template-columns:minmax(0,1fr) 372px;gap:18px;margin-top:18px;align-items:start}
.graph-wrap{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:10px;overflow:auto;min-height:640px}
#graph svg{display:block;width:100%;height:auto;min-width:760px}
.detail{background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:16px 17px;position:sticky;top:86px;max-height:calc(100vh - 110px);overflow:auto}
.detail h2{font-size:19px;margin:0 0 3px;letter-spacing:-.3px}
.detail h3{font-size:13.5px;margin:16px 0 6px;color:var(--ink2);font-weight:600}
.detail .muted{color:var(--ink3);font-size:12.5px;margin:2px 0}
.detail p{margin:6px 0;color:var(--ink2)}
.badges{display:flex;gap:6px;flex-wrap:wrap;margin:7px 0}
.badge{font-size:11.5px;border:1px solid var(--line2);border-radius:13px;padding:2px 9px;color:var(--ink2);background:var(--panel2)}
.badge.cat{border-color:var(--line2);color:var(--ink)}
.chip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;border-radius:20px;padding:2px 9px;background:var(--panel2);border:1px solid var(--line2);color:var(--ink2)}
.source-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.source-list li{border:1px solid var(--line);border-left:3px solid var(--line2);border-radius:9px;padding:7px 10px;background:var(--panel2);font-size:12.5px;color:var(--ink2)}
.source-list .field{color:var(--lime);font-weight:600;margin-right:6px;font-size:12px}
.source-list .quote{color:var(--ink);overflow-wrap:anywhere}
.source-list .stamp{color:var(--ink3);font-size:11px;display:block;margin-top:2px}
.person-link{display:inline-flex;align-items:center;gap:6px;margin-top:12px;background:var(--panel3);border:1px solid var(--line2);color:var(--ink);border-radius:20px;padding:7px 13px;text-decoration:none;font-size:12.5px}
.person-link:hover{border-color:var(--ink3)}
.legend{display:grid;gap:5px;font-size:12px;color:var(--ink2);margin:8px 0 0}
.legend i{display:inline-block;width:22px;height:0;border-top:2px solid var(--line2);vertical-align:middle;margin-right:8px}
.legend .l-relation{border-color:var(--blue)}
.legend .l-company{border-color:var(--ink3);border-top-style:dashed}
.legend .l-peer{border-color:var(--warn);border-top-style:dashed}
.legend .l-bridge{border-color:var(--gold, #e8c37a);border-top-style:dotted}
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:12px 0 0}
.toolbar input[type=search]{background:var(--panel2);border:1px solid var(--line2);color:var(--ink);border-radius:20px;padding:7px 13px;min-width:220px;font:inherit}
.toolbar input[type=search]:focus{outline:2px solid var(--lime);outline-offset:1px}
.filters{display:flex;gap:6px;flex-wrap:wrap}
.filter{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line2);border-radius:20px;padding:5px 10px;font-size:12px;color:var(--ink2);cursor:pointer;user-select:none;background:var(--panel2)}
.filter input{accent-color:var(--lime);margin:0;width:13px;height:13px}
.filter.off{opacity:.45}
.section{margin-top:30px}
.section>h2{font-size:22px;letter-spacing:-.4px;margin:0 0 4px}
.section>p{margin:0 0 14px;color:var(--ink3);font-size:12.5px}
.layer{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:14px 16px;margin-bottom:14px}
.layer-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.layer-head .tag{font-size:11px;color:#15200a;background:var(--lime);border-radius:12px;padding:1px 8px;font-weight:700}
.layer-head h3{margin:0;font-size:16px}
.layer-head .n{color:var(--ink3);font-size:12px}
.layer-desc{color:var(--ink3);font-size:12.5px;margin:4px 0 12px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.node-card{border:1px solid var(--line);border-radius:12px;padding:11px 12px;background:var(--panel2);min-width:0}
.node-card h4{margin:0;font-size:14px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.node-card .sub{color:var(--ink3);font-size:12px;margin:3px 0 0}
.node-card .row{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px}
.node-card .quote{color:var(--ink2);font-size:12px;margin-top:7px;overflow-wrap:anywhere}
.node-card .quote b{color:var(--lime);font-weight:600}
.mini{font-size:11.5px;color:var(--ink3)}
table.provenance{width:100%;border-collapse:collapse;font-size:12.5px}
table.provenance th,table.provenance td{text-align:left;border-bottom:1px solid var(--line);padding:8px 9px;vertical-align:top}
table.provenance th{color:var(--ink3);font-weight:600;white-space:nowrap}
table.provenance td{color:var(--ink2);overflow-wrap:anywhere}
.rules{margin:10px 0 0;padding-left:18px;color:var(--ink2);font-size:12.5px}
.rules li{margin:4px 0}
.empty{padding:40px;text-align:center;color:var(--ink3)}
#status.error{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);background:#4a1f25;border:1px solid var(--bad);color:#ffd7dd;border-radius:12px;padding:10px 16px;font-size:13px;z-index:50}
#status:empty{display:none}
.relation-editor{margin:12px 0;padding:12px;background:var(--panel2);border:1px solid var(--line2);border-radius:12px}
.relation-editor fieldset{padding:0;border:0;margin:0;display:flex;gap:9px;flex-wrap:wrap;min-width:0}
.relation-editor legend{font-size:13px;font-weight:650;padding:0;margin-bottom:9px;color:var(--ink)}
.relation-editor label{width:100%;font-size:12px;color:var(--ink2)}
.relation-editor select{width:100%;min-height:42px;padding:8px;border:1px solid var(--line2);border-radius:8px;color:var(--ink);background:var(--panel);font:inherit}
.relation-editor .btn{min-height:42px}
.relation-editor select:focus-visible,.relation-editor button:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
.relation-editor fieldset:disabled{opacity:.6}
.confirmed-label{color:var(--lime)!important;font-size:12px}
#status.success{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);max-width:calc(100vw - 32px);background:#213420;border:1px solid var(--lime);color:#e2ffcf;border-radius:12px;padding:10px 16px;font-size:13px;z-index:50}
.noscript{color:var(--warn);padding:20px}
@media(max-width:980px){.board{grid-template-columns:1fr}.detail{position:static;max-height:none}}
@media print{:root{color-scheme:light}body{background:#fff;color:#111}.topbar,.toolbar,.detail,.back{display:none}main{padding:0}.graph-wrap{border:0}.layer{break-inside:avoid;page-break-inside:avoid}}
