:root{--ink:#27231f;--muted:#716960;--paper:#fffdf8;--wash:#f2eee6;--line:#ded6c9;--accent:#8d3025;--gold:#b88b35;--green:#527b5c;--blue:#476b86;--shadow:0 8px 24px rgba(42,31,21,.08)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--wash);color:var(--ink);font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;font-size:14px;line-height:1.6}button,input,select{font:inherit}button{cursor:pointer}.app-header{position:sticky;top:0;z-index:20;background:#29241f;color:#f7efe2;border-bottom:1px solid #483b31}.header-inner{max-width:1320px;margin:auto;padding:14px 24px;display:flex;gap:18px;align-items:center;flex-wrap:wrap}.brand{margin:0;font-size:21px;line-height:1.2;letter-spacing:.02em}.header-stat{color:#d8cabc;font-size:12px;white-space:nowrap}.tabs{display:flex;gap:6px;margin-left:auto;overflow-x:auto;max-width:100%;padding-bottom:2px}.tabs button,.subnav button{border:1px solid transparent;border-radius:6px;background:#3d352e;color:#eadfd2;padding:7px 12px;white-space:nowrap}.tabs button:hover,.subnav button:hover{border-color:#c5a05f}.tabs button.active,.subnav button.active{background:var(--accent);color:#fff;border-color:var(--accent)}.shell{max-width:1320px;margin:auto;padding:24px 24px 72px}.view{display:none}.view.active{display:block}.section-head{display:flex;align-items:end;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:16px}.section-head h2{margin:0;font-size:24px;color:#3a3029}.section-head p{margin:3px 0 0;color:var(--muted);font-size:13px}.panel{background:var(--paper);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);padding:18px}.summary-hero{display:grid;grid-template-columns:1.35fr 1fr;gap:18px;margin-bottom:18px}.hero-copy{background:#342c25;color:#f7efe2;border-radius:10px;padding:28px}.hero-copy h2{font-size:28px;margin:0 0 10px;color:#fff}.hero-copy p{margin:0;color:#dfd0c1;max-width:58ch}.hero-note{margin-top:18px;color:#d8bf86;font-size:12px}.metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.metric{background:#fff;border:1px solid var(--line);border-radius:8px;padding:15px}.metric .value{display:block;font-size:25px;font-weight:800;color:var(--accent);line-height:1.1}.metric .label{display:block;color:var(--muted);font-size:12px;margin-top:5px}.quality-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.quality-grid .quality{border-left:3px solid var(--gold);background:#fbf8f1;padding:12px 14px}.quality strong{display:block}.quality span{color:var(--muted);font-size:12px}.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:14px}.toolbar label{color:var(--muted);font-size:12px}.toolbar input,.toolbar select{min-width:140px;background:#fff;border:1px solid #cfc5b7;border-radius:6px;padding:7px 9px;color:var(--ink)}.toolbar input.search{min-width:220px}.toolbar .grow{flex:1}.subnav{display:flex;gap:7px;margin-bottom:14px}.subnav button{background:#fff;color:var(--muted);border-color:var(--line);padding:6px 11px}.data-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.location-card,.character-card{background:#fff;border:1px solid var(--line);border-radius:9px;box-shadow:0 2px 9px rgba(50,40,30,.05);overflow:hidden}.location-card{padding:16px}.card-head{display:flex;align-items:start;justify-content:space-between;gap:8px}.card-title{font-size:18px;color:var(--accent);font-weight:800}.tag{display:inline-block;background:#f2ead9;color:#775f2e;border-radius:4px;padding:2px 7px;font-size:11px;white-space:nowrap}.status{display:inline-block;border-radius:999px;padding:2px 7px;font-size:11px;background:#edf4ec;color:var(--green)}.status.draft{background:#f6efe4;color:#86632a}.muted{color:var(--muted)}.meta{margin-top:7px;font-size:12px;color:#615851}.meta b{color:#443b34}.event-list{margin:8px 0 0;padding-left:18px;color:#733025;font-size:12px}.event-list li{margin:2px 0}.source-row{display:flex;gap:5px;flex-wrap:wrap;margin-top:9px;align-items:center}.source-chip{display:inline-block;border:1px solid #e1d5c4;color:#6a6058;border-radius:4px;padding:2px 7px;font-size:11px;line-height:1.3;background:#fffdf8}.source-chip button{border:0;background:none;padding:0;color:inherit}.pagination{display:flex;align-items:center;justify-content:center;gap:9px;margin-top:18px}.pagination button,.action{border:1px solid #cbbda8;background:#fff;border-radius:6px;padding:6px 10px;color:#5f5145}.pagination button:disabled{opacity:.45;cursor:not-allowed}.page-label{color:var(--muted);font-size:12px}.chapter-list{display:grid;gap:12px}.chapter-block{background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px}.chapter-block h3{margin:0 0 7px;color:var(--accent);font-size:16px}.chapter-place{display:grid;grid-template-columns:130px 1fr;gap:8px;border-top:1px dashed #e8dfd3;padding:7px 0;font-size:13px}.chapter-place:first-of-type{border-top:0}.chapter-place strong{color:#3b4651}.map-wrap{position:relative}.map-note{margin-top:8px;color:var(--muted);font-size:12px}.map-box{height:590px;border:1px solid #c9d2d8;border-radius:9px;overflow:hidden;background:#e9eef0}.fallback-map{height:100%;width:100%;display:block;background:#e8efe8}.fallback-map text{font-size:11px;fill:#3e5144}.character-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.character-toolbar .mode{border:1px solid #cdbfae;background:#fff;border-radius:6px;padding:6px 10px;color:#5b5047}.character-toolbar .mode.active{background:var(--gold);border-color:var(--gold);color:#2e271f}.character-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px}.character-card{height:340px;perspective:1200px;position:relative;--cbg:#2b2620;--cink:#fbf5e9;--csub:#ddd0bb;--cgold:#c8a86a;--cline:rgba(184,139,53,.45);--cseal:#d9705c;--cbtn:#6b5c45;--cbtnink:#d8c9ae}.character-card.thm-paper{--cbg:#f7f1e3;--cink:#3b322a;--csub:#6a5c4c;--cgold:#8a6a2a;--cline:#d8c9ae;--cseal:#b94a37;--cbtn:#cbbda8;--cbtnink:#5f5145}.character-card.thm-cinnabar{--cbg:#5e2420;--cink:#f7e9d8;--csub:#e8cdb9;--cgold:#e8c872;--cline:rgba(232,200,114,.5);--cseal:#f2c1ae;--cbtn:#8a4a3e;--cbtnink:#f0d9c2}.character-card .inner{height:100%;transition:transform .5s cubic-bezier(.4,.1,.2,1);transform-style:preserve-3d}.character-card.flip .inner{transform:rotateY(180deg)}.character-card:not(.flip) .back,.character-card.flip .front{pointer-events:none}.character-card:not(.flip) .front,.character-card.flip .back{pointer-events:auto}.character-card .face{position:absolute;inset:0;backface-visibility:hidden;display:flex;flex-direction:column;overflow:hidden;border-radius:9px}.character-card .front{background:var(--cbg);color:var(--cink);padding:18px 16px 14px;justify-content:flex-start}.character-card .front::after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.014) 0 1px,transparent 1px 3px)}.pc-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;position:relative;z-index:1}.pc-faction{font-size:10px;letter-spacing:.14em;color:var(--cgold);text-transform:none;line-height:1.4;max-width:70%}.pc-seal{flex:none;width:24px;height:24px;display:grid;place-items:center;border:1.5px solid var(--cseal);color:var(--cseal);font-family:'Songti SC','STSong','SimSun',serif;font-size:13px;border-radius:2px;opacity:.92}.pc-name{margin:14px 0 0;font-family:'Songti SC','STSong','SimSun','Noto Serif CJK SC',serif;font-size:27px;font-weight:700;letter-spacing:.06em;color:var(--cink);position:relative;z-index:1;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pc-rule{height:1px;background:linear-gradient(90deg,var(--cgold),rgba(184,139,53,0));margin:11px 0 12px;position:relative;z-index:1}.pc-quote{margin:0;font-size:12px;line-height:1.75;color:var(--csub);position:relative;z-index:1;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}.pc-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:8px;position:relative;z-index:1}.pc-chapters{font-size:10px;color:var(--csub);opacity:.72;letter-spacing:.08em}.character-card .back{background:var(--cbg);color:var(--cink);transform:rotateY(180deg);overflow:auto;padding:15px 15px 12px}.character-card .back::after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.014) 0 1px,transparent 1px 3px)}.pcb-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;border-bottom:1.5px solid var(--cseal);padding-bottom:7px;margin-bottom:2px;position:relative;z-index:1}.pcb-head h3{margin:0;font-family:'Songti SC','STSong','SimSun',serif;font-size:19px;color:var(--cink);letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pcb-life{flex:none;font-size:10px;color:var(--csub);opacity:.8;letter-spacing:.04em}.pcb-list{margin:0;flex:1;position:relative;z-index:1}.pcb-row{display:grid;grid-template-columns:30px 1fr;gap:5px;padding:4px 0;border-bottom:1px dotted var(--cline);align-items:baseline}.pcb-row dt{margin:0;font-size:10.5px;color:var(--cgold);letter-spacing:.06em;line-height:1.4}.pcb-row dd{margin:0;font-size:11px;line-height:1.5;color:var(--csub);word-break:break-word;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pcb-foot{margin-top:8px;display:flex;align-items:center;justify-content:space-between;gap:8px;position:relative;z-index:1}.character-card .back .card-actions button{border:1px solid var(--cbtn);background:transparent;color:var(--cbtnink)}.character-card .front .card-actions button{border:1px solid var(--cbtn);background:transparent;color:var(--cbtnink)}.character-card .front .card-actions button:hover{border-color:var(--cgold);color:var(--cink)}.card-actions{display:flex;gap:6px;margin-top:0}.card-actions button{border:1px solid #ddd2c0;background:#fffdf8;border-radius:4px;padding:3px 9px;color:#7a6a58;font-size:11px}.card-actions button:hover{border-color:var(--accent);color:var(--accent)}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:8px;background:#fff}.data-table{width:100%;border-collapse:collapse;min-width:760px}.data-table th,.data-table td{text-align:left;border-bottom:1px solid #eee7de;padding:10px 12px;vertical-align:top}.data-table th{background:#f7f2e9;color:#64584e;font-size:12px;position:sticky;top:0}.data-table td{font-size:13px}.data-table tr:hover{background:#fffaf1}.cat-tag{display:inline-block;border:1px solid color-mix(in srgb,var(--cat) 55%,transparent);background:color-mix(in srgb,var(--cat) 12%,#fff);color:color-mix(in srgb,var(--cat) 82%,#000);border-radius:4px;padding:1px 7px;font-size:11px;white-space:nowrap}.cat-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:-1px;background:var(--cat)}.clean-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.clean-card{border:1px solid var(--line);border-left:3px solid var(--gold);background:#fbfaf5;border-radius:9px;padding:13px 15px}.clean-card.span-2{grid-column:1/-1}.clean-card strong{display:block;font-size:13px;color:#40362f;margin-bottom:4px}.clean-card>span{display:block;color:var(--muted);font-size:12px;margin-bottom:6px}.clean-chips{display:flex;flex-wrap:wrap;gap:4px}.merge-chips{display:flex;flex-wrap:wrap;gap:6px;max-height:120px;overflow:auto;align-content:flex-start}.merge-more{margin-top:2px;border:1px dashed #c9bda9;background:#fffdf8;color:#7a6a58;border-radius:6px;padding:3px 10px;font-size:11px;white-space:nowrap}.merge-more:hover{border-color:var(--accent);color:var(--accent)}.merge-chip{display:inline-block;background:#fff;border:1px solid var(--line);border-radius:6px;padding:3px 8px;font-size:11px;color:#615851;line-height:2;max-width:100%;vertical-align:top}.merge-chip b{color:#7a2f24}.merge-chip i{color:#b88b35;font-style:normal}.merge-chip em{font-style:normal;color:#8c6344}.cat-dist{display:flex;height:14px;border-radius:4px;overflow:hidden;background:#eee8df;margin:4px 0 8px}.cat-dist span{height:100%;transition:width .3s}.cat-legend{display:flex;flex-wrap:wrap;gap:10px;color:var(--muted);font-size:11px}.cat-legend span{display:inline-flex;align-items:center}.cat-legend b{color:#40362f;margin-left:2px}.link-button{border:0;background:none;padding:0;text-align:left;color:var(--accent);font-weight:700}.timeline{border-left:3px solid var(--gold);padding-left:20px}.year-group{margin:0 0 20px}.year-group h3{margin:0 0 5px;color:var(--accent);font-size:17px}.timeline-item{padding:5px 0;font-size:13px}.timeline-item button{border:0;background:none;color:var(--ink);padding:0;text-align:left}.timeline-item button:hover{color:var(--accent)}.unknown{margin-top:22px;border-top:1px dashed var(--line);padding-top:16px}.empty{padding:36px;text-align:center;color:var(--muted)}dialog{border:0;border-radius:10px;padding:0;width:min(680px,calc(100vw - 32px));box-shadow:0 18px 70px rgba(0,0,0,.28);color:var(--ink)}dialog::backdrop{background:rgba(25,20,15,.5)}.dialog-body{padding:22px}.dialog-head{display:flex;justify-content:space-between;gap:12px;align-items:start;border-bottom:1px solid var(--line);padding-bottom:12px}.dialog-head h2{margin:0;color:var(--accent);font-size:21px}.dialog-close{border:0;background:#f1ebe2;border-radius:5px;padding:4px 9px}.detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}.detail-block{background:#fbf8f2;padding:10px;border-radius:6px}.detail-block strong{display:block;color:#665a4f;font-size:11px;margin-bottom:3px}.detail-block p{margin:0}.detail-wide{grid-column:1/-1}.print-area{display:none}.print-page{width:210mm;min-height:297mm;margin:0 auto 12px;padding:8mm;background:#fff;position:relative}.print-grid{display:grid;grid-template-columns:repeat(3,63mm);grid-template-rows:repeat(3,88mm);justify-content:center}.print-card{width:63mm;height:88mm;border:1px dashed var(--cline);padding:4.5mm 4mm;overflow:hidden;background:var(--cbg);color:var(--cink);box-shadow:none;-webkit-print-color-adjust:exact;print-color-adjust:exact}.print-card.front,.print-card.back{display:flex;flex-direction:column}.print-card .pc-faction{font-size:8.5px}.print-card .pc-seal{width:18px;height:18px;font-size:10px;border-width:1.2px}.print-card .pc-name{font-size:19px;margin-top:7px}.print-card .pc-rule{margin:7px 0 8px}.print-card .pc-quote{font-size:9.5px;line-height:1.5;-webkit-line-clamp:6}.print-card .pc-foot{margin-top:auto}.print-card .pcb-head h3{font-size:13px;margin:0}.print-card .pcb-life{font-size:8.5px}.print-card .pcb-list{font-size:8.5px;line-height:1.45}.print-card .pcb-row{grid-template-columns:30px 1fr;gap:5px;padding:4px 0}.print-card .pcb-foot{margin-top:6px}.print-guide{background:#fbf5e8;border:1px dashed #c9a24b;padding:10px;border-radius:6px;margin-bottom:13px;color:#6a5630;font-size:12px}.print-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}@media(max-width:1000px){.data-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.character-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.summary-hero{grid-template-columns:1fr}.quality-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.header-inner{padding:13px 16px;gap:10px}.brand{font-size:18px}.header-stat{width:100%}.tabs{width:100%;margin-left:0}.tabs button{flex:1;padding:7px 8px;font-size:12px}.shell{padding:17px 14px 52px}.section-head h2{font-size:21px}.panel{padding:13px}.hero-copy{padding:20px}.hero-copy h2{font-size:23px}.metric-grid,.quality-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.data-grid,.character-grid{grid-template-columns:1fr}.toolbar input.search,.toolbar input{min-width:0;width:100%}.toolbar label{width:auto}.chapter-place{grid-template-columns:92px 1fr}.map-box{height:470px}.character-card{height:245px}.detail-grid{grid-template-columns:1fr}.detail-wide{grid-column:auto}.print-page{width:210mm}.print-area{overflow:auto}}@media print{body{background:#fff}.app-header,.shell>*:not(#characters){display:none!important}#characters{display:block!important}#characters .section-head{display:none!important}#characters .panel{display:block!important;border:0!important;box-shadow:none!important;background:#fff!important;padding:0!important}#characters .toolbar,#characters .character-toolbar,#characters .print-guide,#characters .pagination,#charScreen{display:none!important}.print-area{display:block!important}.print-page{box-shadow:none;margin:0;page-break-after:always}@page{size:A4;margin:0}}
 
.distribution-intro{display:grid;grid-template-columns:1.15fr .85fr;gap:14px;margin-bottom:14px}.distribution-callout{background:#342c25;color:#f7efe2;border-radius:9px;padding:20px}.distribution-callout h3{margin:6px 0 7px;font-size:20px;line-height:1.35;color:#fff}.distribution-callout p{margin:0;color:#dfd0c1;font-size:12px}.signal{display:inline-block;color:#f0d18c;font-size:11px;letter-spacing:.08em}.distribution-stat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.distribution-stat{background:#fff;border:1px solid var(--line);border-radius:8px;padding:12px}.distribution-stat strong{display:block;color:var(--accent);font-size:20px;line-height:1.2}.distribution-stat span{display:block;margin-top:4px;color:var(--muted);font-size:11px}.distribution-legend{display:flex;gap:13px;flex-wrap:wrap;margin:3px 0 14px;color:var(--muted);font-size:12px}.distribution-legend span{display:inline-flex;align-items:center;gap:5px}.legend-dot{width:10px;height:10px;border-radius:2px;display:inline-block}.legend-character{background:#8d3025}.legend-location{background:#b88b35}.legend-event{background:#476b86}.legend-relation{background:#527b5c}.distribution-scale{display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:11px;margin-bottom:6px}.part-list{display:grid;gap:11px}.part-row{display:grid;grid-template-columns:minmax(155px,1fr) minmax(240px,2.4fr) 66px 82px;gap:10px;align-items:center}.part-label strong{display:block;color:#40362f;font-size:13px}.part-label span{display:block;color:var(--muted);font-size:11px}.part-bar,.chapter-track,.density-track{height:16px;background:#eee8df;border-radius:3px;overflow:hidden}.part-bar{display:flex;min-width:2px}.part-segment,.chapter-segment{height:100%;display:block}.part-values{text-align:right;font-weight:800;color:var(--accent);font-size:13px}.part-density{text-align:right;color:var(--muted);font-size:11px}.distribution-note{color:var(--muted);font-size:12px;margin:-5px 0 12px}.chapter-header,.chapter-row{display:grid;grid-template-columns:minmax(145px,1.15fr) minmax(210px,2fr) 100px 80px;gap:10px;align-items:center}.chapter-header{color:#756a60;font-size:11px;padding:0 0 6px;border-bottom:1px solid var(--line)}.chapter-list-dist{display:grid;gap:7px}.chapter-row{padding:4px 0;border-bottom:1px solid #eee8df}.chapter-row:last-child{border-bottom:0}.chapter-name{min-width:0}.chapter-name strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#42382f;font-size:12px}.chapter-name span{display:block;color:var(--muted);font-size:10px}.chapter-bars{display:grid;gap:3px}.chapter-track{display:flex;height:12px}.density-track{height:4px;background:#e7edf0}.density-track span{display:block;height:100%;background:var(--blue);border-radius:2px}.chapter-value{text-align:right;font-weight:800;color:var(--accent);font-size:12px}.chapter-density{text-align:right;color:var(--blue);font-size:11px}.layer-flow{display:grid;grid-template-columns:minmax(0,1fr) 28px minmax(0,1.3fr) 28px minmax(0,1fr) 28px minmax(0,1.2fr);gap:8px;align-items:stretch}.layer-node{background:#fbf8f1;border:1px solid var(--line);border-top:3px solid var(--gold);border-radius:7px;padding:13px;min-width:0}.layer-node:nth-child(3){border-top-color:var(--accent)}.layer-node:nth-child(5){border-top-color:var(--green)}.layer-node:nth-child(7){border-top-color:var(--blue)}.layer-node small{display:block;color:var(--muted);font-size:10px;letter-spacing:.08em}.layer-node strong{display:block;margin:3px 0;color:#40362f}.layer-node b{display:block;color:var(--accent);font-size:20px;line-height:1.2}.layer-node span{display:block;margin-top:5px;color:var(--muted);font-size:11px}.layer-connector{display:flex;align-items:center;justify-content:center;color:var(--gold);font-size:21px}.layer-list{margin:7px 0 0;padding-left:16px;color:var(--muted);font-size:11px}.distribution-foot{margin-top:12px;color:var(--muted);font-size:11px;border-top:1px dashed var(--line);padding-top:10px}@media(max-width:1000px){.distribution-intro{grid-template-columns:1fr}.part-row{grid-template-columns:minmax(145px,1fr) minmax(180px,2fr) 62px 76px}.layer-flow{grid-template-columns:1fr 22px 1fr 22px 1fr 22px 1fr}.layer-node{padding:10px}}@media(max-width:640px){.distribution-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.distribution-stat{padding:10px}.distribution-stat strong{font-size:17px}.part-row{grid-template-columns:1fr 58px 70px;gap:7px}.part-row .part-bar{grid-column:1/-1;grid-row:2}.part-values{grid-column:2;grid-row:1}.part-density{grid-column:3;grid-row:1}.chapter-header{display:none}.chapter-row{grid-template-columns:minmax(100px,1fr) minmax(110px,1.2fr) 52px 62px;gap:6px}.chapter-name strong{font-size:11px}.chapter-name span{font-size:9px}.chapter-value,.chapter-density{font-size:10px}.layer-flow{grid-template-columns:1fr;gap:6px}.layer-connector{height:18px;transform:rotate(90deg)}.layer-node b{font-size:18px}}
 @media(max-width:640px){.chapter-row{grid-template-columns:minmax(80px,1fr) minmax(80px,1.2fr) 48px 56px}}
 .layer-connector{font-size:0!important;height:1px;background:var(--gold);opacity:.7}
 @media(max-width:640px){.layer-connector{width:1px;height:18px;transform:none}}
 .visuals-stack{display:grid;gap:18px}.visuals-panel{min-width:0}.visuals-panel .section-head{margin-bottom:12px}.visuals-panel h3{margin:0;color:#40362f;font-size:18px}.visuals-panel .section-head p{max-width:72ch}.visual-toolbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:0 0 13px}.visual-toolbar label{color:var(--muted);font-size:12px}.visual-toolbar select{min-width:180px;background:#fff;border:1px solid #cfc5b7;border-radius:6px;padding:7px 9px;color:var(--ink)}.visual-note{color:var(--muted);font-size:12px}.heatmap-wrap{overflow-x:auto;overflow-y:hidden;border:1px solid var(--line);border-radius:8px;background:#fff;padding:10px}.heatmap-grid{display:grid;grid-template-columns:190px repeat(var(--heatmap-columns),18px);min-width:max-content;align-items:center;row-gap:4px}.heatmap-corner{height:46px;display:flex;align-items:end;padding:0 8px 5px;color:var(--muted);font-size:11px;position:sticky;left:0;background:#fff;z-index:2}.heatmap-chapter{height:46px;display:flex;align-items:end;justify-content:center;color:#766c63;font-size:10px;writing-mode:vertical-rl;transform:rotate(180deg);padding-bottom:4px}.heatmap-name{height:22px;display:flex;align-items:center;gap:6px;padding:0 8px;position:sticky;left:0;background:#fff;z-index:1;border-top:1px solid #f0ebe4;color:#443a32;font-size:12px;white-space:nowrap}.heatmap-name small{color:var(--muted);font-size:10px}.heatmap-cell{display:block;width:14px;height:16px;padding:0;border:0;border-radius:2px;background:#eee8df;box-shadow:none}.heatmap-cell:hover{outline:2px solid var(--accent);outline-offset:1px}.heatmap-cell.present{background:var(--accent)}.heatmap-cell.part-p2.present{background:#b88b35}.heatmap-cell.part-p3.present{background:#476b86}.heatmap-cell.part-p4.present{background:#527b5c}.heatmap-cell.part-p5.present{background:#8d5f42}.heatmap-cell.part-p6.present{background:#6d688c}.heatmap-cell.part-p7.present{background:#a24b55}.heatmap-legend{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:10px;color:var(--muted);font-size:11px}.heatmap-key{width:12px;height:12px;border-radius:2px;display:inline-block;margin-right:4px;vertical-align:-2px}.heatmap-key.present{background:var(--accent)}.heatmap-key.absent{background:#faf7f1;border:1px solid #d5c9b6}.heatmap-key.part{margin-right:4px}.legend-sep{width:1px;height:13px;background:var(--line);margin:0 2px}.legend-title{color:#8a6a2a;font-weight:600}.event-legend{display:flex;gap:12px;flex-wrap:wrap;margin:0 0 13px;color:var(--muted);font-size:11px}.event-legend-item{display:inline-flex;align-items:center;gap:5px}.event-legend-item i{display:inline-block;width:10px;height:10px;border-radius:2px;background:var(--event-color,#8d3025)}.evolution-list{display:grid;gap:10px}.evolution-row{display:grid;grid-template-columns:178px minmax(0,1fr) 48px;gap:10px;align-items:center}.evolution-label{min-width:0}.evolution-label strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#443a32;font-size:12px}.evolution-label span{display:block;color:var(--muted);font-size:10px}.evolution-track{height:22px;background:#eee8df;border-radius:3px;overflow:hidden}.evolution-fill{height:100%;display:flex;min-width:2px}.evolution-segment{height:100%;display:block;min-width:1px}.evolution-total{text-align:right;color:var(--accent);font-size:12px;font-weight:800}.network-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}.network-controls label{color:var(--muted);font-size:12px}.network-controls select{flex:1;min-width:220px;max-width:500px;background:#fff;border:1px solid #cfc5b7;border-radius:6px;padding:7px 9px;color:var(--ink)}.network-summary{display:flex;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:12px;margin-bottom:5px}.network-summary strong{color:var(--accent)}.network-svg{display:block;width:100%;height:auto;min-height:300px;border:1px solid var(--line);border-radius:8px;background:#fffdf9}.network-svg text{font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif}.network-link{stroke:#c9bda9;stroke-width:1.5}.network-link.incoming{stroke-dasharray:5 4}.network-node{fill:#fff9ef;stroke:#b88b35;stroke-width:1.5}.network-node.center{fill:#8d3025;stroke:#8d3025}.network-label{fill:#443a32;font-size:12px;text-anchor:middle}.network-label.center{fill:#fff9ef;font-weight:700}.network-edge-label{fill:#766c63;font-size:9px;text-anchor:middle;paint-order:stroke;stroke:rgba(255,253,248,.92);stroke-width:3px;stroke-linejoin:round}.network-empty{padding:28px;text-align:center;color:var(--muted)}@media(max-width:1000px){.evolution-row{grid-template-columns:150px minmax(0,1fr) 44px}.heatmap-grid{grid-template-columns:170px repeat(var(--heatmap-columns),18px)}}@media(max-width:640px){.visuals-panel{padding:13px}.visuals-panel h3{font-size:17px}.heatmap-grid{grid-template-columns:135px repeat(var(--heatmap-columns),18px)}.heatmap-corner{height:40px}.heatmap-chapter{height:40px}.heatmap-name{font-size:11px}.heatmap-name small{display:none}.evolution-row{grid-template-columns:1fr 52px;gap:6px}.evolution-label{grid-column:1/-1}.evolution-track{grid-column:1}.evolution-total{grid-column:2;grid-row:2}.network-controls select{width:100%;min-width:0;max-width:none}.network-svg{min-height:0}.network-edge-label{font-size:8px}.network-label{font-size:11px}}

.era-tag{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:999px;background:#f2ead9;color:#775f2e;font-size:11px;font-weight:400;vertical-align:2px}
.dynasty-band{display:flex;height:52px;align-items:stretch;margin-bottom:0}.dynasty-labels{position:relative;height:20px;margin:4px 0}.dynasty-labels.above{margin-bottom:3px}.dynasty-labels.below{margin-top:3px;margin-bottom:10px}.dynasty-label{position:absolute;transform:translateX(-50%);white-space:nowrap;font-size:11px;line-height:15px;color:#5f5145;cursor:pointer;padding:1px 5px;border-radius:4px;transition:background .15s,color .15s}.dynasty-label.row-0{top:0}.dynasty-label.row-1{top:0}.dynasty-label:hover{background:#f0e7d8;color:var(--accent)}.dynasty-label.active{background:var(--accent);color:#fff5ec}
.dynasty-seg{min-width:4px;border-radius:4px;box-sizing:border-box;border-right:1px solid rgba(255,255,255,.55);color:#fff;font-size:11px;display:flex;align-items:flex-end;justify-content:center;padding:3px 2px;cursor:pointer;overflow:hidden;white-space:nowrap}
.dynasty-seg:hover{filter:brightness(1.12)}
.dynasty-hist{display:flex;gap:1px;align-items:flex-end;height:84px;background:#faf6ee;border-radius:6px;padding:4px;overflow-x:auto}
.dynasty-hist span{flex:1;min-width:1px;border-radius:1px 1px 0 0}
.dynasty-scale{display:flex;justify-content:space-between;color:var(--muted);font-size:11px;margin-top:6px}
.dynasty-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.dynasty-card{background:#fff;border:1px solid var(--line);border-top:4px solid var(--cat);border-radius:9px;padding:14px;cursor:pointer;box-shadow:0 2px 9px rgba(50,40,30,.05);transition:transform .15s ease}
.dynasty-card:hover{transform:translateY(-2px)}
.dynasty-card.active{outline:2px solid var(--cat);outline-offset:1px}
.dynasty-card h3{margin:0;font-size:20px;color:var(--cat)}
.dynasty-card .muted{font-size:12px;margin-top:3px}
.dynasty-card p{font-size:12px;margin:8px 0 0;color:#615851;line-height:1.55}
.dynasty-detail-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:16px}
.dynasty-event-row{display:flex;justify-content:space-between;gap:10px;align-items:baseline;border-bottom:1px dashed #eee7de;padding:7px 2px;font-size:13px}
@media(max-width:1000px){.dynasty-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.dynasty-detail-grid{grid-template-columns:1fr}}
@media(max-width:640px){.dynasty-cards{grid-template-columns:1fr}.dynasty-band{height:40px}}
.chronicle-wrap{position:relative;overflow:hidden}.chronicle-band{position:absolute;top:0;bottom:0;opacity:.16;z-index:0}.chronicle-content{position:relative;z-index:1}.chronicle-axis{position:relative;height:20px;border-bottom:1px solid var(--line);margin-bottom:8px}.chronicle-tick{position:absolute;transform:translateX(-50%);font-size:10px;color:var(--muted)}.chronicle-group{margin:15px 0 5px;font-size:13px;font-weight:700;color:#40362f;display:flex;align-items:center}.chronicle-row{display:grid;grid-template-columns:132px 1fr;gap:10px;align-items:center;padding:2px 0}.chronicle-name{text-align:right;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chronicle-track{position:relative;height:14px;background:#f3eee4;border-radius:3px}.chronicle-bar.est{background-image:repeating-linear-gradient(90deg,rgba(255,255,255,.55) 0 3px,transparent 3px 6px)!important;opacity:.75}.chronicle-bar{position:absolute;top:3px;height:8px;border-radius:2px}.voyage-num{background:none;border:none;color:#8a6a1f;font-weight:700;font-size:11px;text-shadow:0 1px 0 #fff}@media(max-width:640px){.chronicle-row{grid-template-columns:92px 1fr}}
.map-layout{display:flex;gap:14px;align-items:stretch}
.map-main{flex:1;min-width:0}
.loc-dock{flex:0 0 336px;width:336px;max-height:590px;overflow:auto;background:var(--paper);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);padding:14px 16px}
.loc-dock[hidden]{display:none}
.loc-dock .dock-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}
.loc-dock .dock-head h3{margin:0;color:var(--accent);font-size:19px;line-height:1.3}
.loc-dock .dock-close{border:0;background:#f1ebe2;border-radius:5px;padding:4px 9px;white-space:nowrap}
.loc-dock .detail-grid{margin-top:0}
@media(max-width:760px){.map-layout{flex-direction:column}.map-main{order:1}.loc-dock{flex:none;width:auto;max-height:340px;order:2}}
#fullNet{position:relative}.full-graph-canvas{display:block;width:100%;height:auto;min-height:320px;cursor:grab;background:#fffdf9;border:1px solid var(--line);border-radius:8px}.full-graph-canvas.dragging{cursor:grabbing}.full-graph-tip-box{position:fixed;pointer-events:none;background:rgba(40,33,28,.92);color:#fffdf9;font-size:12px;padding:5px 8px;border-radius:6px;max-width:240px;white-space:normal;transform:translate(-50%,calc(-100% - 12px));display:none;z-index:50}.full-graph-tip{color:var(--muted);font-size:12px}
/* 详情弹窗：移动端与长内容下保证可滚动、不溢出视口 */
#detailDialog{max-width:min(900px,94vw);max-height:90vh;padding:0;border:0}
.dialog-body{max-height:90vh;overflow:auto}
/* 窄屏：总览与分布的双栏布局折叠为单列，收紧内边距 */
@media(max-width:760px){.summary-hero{grid-template-columns:1fr}.distribution-intro{grid-template-columns:1fr}.panel{padding:14px}.hero-copy{padding:20px}.metric-grid{gap:8px}.section-head h2{font-size:20px}}


.src-tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:10px;background:#e9ddc6;color:#8a6a2a;font-size:11px;vertical-align:middle}
.src-note{display:inline-block;margin-left:4px;color:var(--muted);font-size:12px}@media print{
.character-card:not(.print-card){height:auto!important;page-break-inside:avoid;perspective:none!important;box-shadow:none!important;overflow:visible!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.character-card .inner{transform:none!important;height:auto!important;display:block!important;transform-style:flat!important}
.character-card .face{position:static!important;backface-visibility:visible!important;transform:none!important;height:auto!important;overflow:visible!important;margin-bottom:10px;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.character-card .back{transform:none!important}
.character-card .card-actions{display:none!important}
}

.ep-tag{display:inline-block;margin-left:5px;padding:0 5px;border-radius:3px;font-size:10px;line-height:1.5;vertical-align:middle;color:#6a6058;background:#f2eee6;border:1px solid #ded6c9;white-space:nowrap}
.ep-tag.ep-place{color:#476b86;background:#eaf0f5;border-color:#c3d3de}
.ep-tag.ep-org{color:#8a6a1f;background:#f6efdd;border-color:#e0cfa4}
.ep-tag.ep-other{color:#6a6058;background:#f2eee6;border-color:#ded6c9}
.ep-tag.ep-regime{color:#7a4a6a;background:#f5ecf2;border-color:#ddc3d4}
.rel{display:inline;white-space:nowrap}
.rel.out{color:#2f6d3a}
.rel.in{color:#3a5a8d}
.rel .muted,.rel.muted{color:var(--muted)}
.network-edge-label{font-size:11px;fill:#5b524a}
.insight-toc{margin:18px 0;padding:16px 18px;background:linear-gradient(180deg,#f8f3e9,#f3ecdd);border:1px solid #e3dccd;border-radius:12px}
.insight-toc-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.insight-toc-head strong{font-size:14px;color:#8a6a1f;letter-spacing:.12em}
.insight-toc-head span{font-size:11px;color:#a3987f}
.insight-toc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(228px,1fr));gap:9px}
.insight-toc-card{display:flex;gap:10px;align-items:flex-start;background:#fff;border:1px solid #e8e1d2;border-left:3px solid var(--disc,#b88b35);border-radius:9px;padding:9px 12px;text-decoration:none;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}
.insight-toc-card:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(60,45,25,.10);border-color:var(--disc,#b88b35)}
.ins-toc-num{font-size:11px;font-weight:700;color:#b9ae98;line-height:1.9;flex:none}
.ins-toc-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.ins-toc-disc{font-size:11px;font-weight:700;color:var(--disc,#8a6a1f);letter-spacing:.06em}
.ins-toc-title{font-size:12.5px;color:#4a4238;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ins-toc-synthesis{background:#fdf9ee;border-color:#e0cd96;border-left:3px solid #b88b35}
.ins-toc-synthesis .ins-toc-disc{color:#8a6a1f}
.insight-sec{margin:26px 0;padding:20px 22px;background:#fffdf8;border:1px solid #e8e1d2;border-top:3px solid var(--disc,#b88b35);border-radius:12px;scroll-margin-top:76px}
.insight-sec-head{display:flex;align-items:center;gap:10px;margin-bottom:10px;border-bottom:1px solid #eee6d6;padding-bottom:8px}
.insight-sec-head h3{margin:0;font-size:18px;color:#2b2620}
.ins-sec-num{font-size:11px;font-weight:700;color:#b9ae98;flex:none}
.insight-badge{font-size:11px;padding:2px 8px;border-radius:20px;background:#efe6d2;color:#8a6a1f;border:1px solid #ddcfa4;white-space:nowrap}
.insight-sec-synthesis{background:linear-gradient(180deg,#fffdf4,#fbf4e2);border:1px solid #e0cd96;border-top:4px solid #b88b35;box-shadow:0 10px 26px rgba(150,110,30,.10)}
.insight-sec-synthesis .insight-sec-head{border-bottom-color:#eddfb9}
.insight-sec-synthesis ul{margin:0 0 12px;padding-left:1.4em;display:flex;flex-direction:column;gap:6px}
.insight-sec-synthesis ul li{line-height:1.7;color:#3a342c;font-size:14px}
.insight-sec-synthesis ul li b{color:#8a6a1f}
.insight-sec ul{margin:0 0 12px;padding-left:1.4em;display:flex;flex-direction:column;gap:6px}
.insight-sec ul li{line-height:1.7;color:#3a342c;font-size:14px}
.insight-sec ul li b{color:#8a6a1f}
.insight-sec p{margin:0 0 12px;line-height:1.85;color:#3a342c;font-size:14.5px}
.insight-sec h4{margin:18px 0 8px;font-size:15.5px;color:#8a6a1f;letter-spacing:.02em}
.insight-sec h4:first-of-type{margin-top:6px}
.insight-refs{margin:30px 0 10px;padding:18px 22px;background:#f7f2e8;border:1px solid #e3dccd;border-radius:12px}
.insight-ref-list{margin:12px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.insight-ref-list li{font-size:12.5px;line-height:1.6;color:#3a342c;padding-left:2em;text-indent:-2em}
.insight-ref-list li i{font-style:italic}
@media(max-width:640px){.insight-toc-grid{grid-template-columns:1fr}.insight-sec{padding:16px 14px}}
/* ---- Phase 6：搜索命中高亮 / deep link 定位闪烁 ---- */
mark.hl{background:#f6dd93;color:#2f2a22;border-radius:2px;padding:0 1px;box-shadow:inset 0 1px 0 rgba(141,48,37,.18)}
.character-card.flash{animation:mingFlash 1.15s ease-in-out 2}
@keyframes mingFlash{0%,100%{box-shadow:0 0 0 0 rgba(141,48,37,0)}35%{box-shadow:0 0 0 3px rgba(141,48,37,.5)}}
@media(prefers-reduced-motion:reduce){
  .character-card.flash{animation:none;outline:2px solid rgba(141,48,37,.5);outline-offset:2px}
}

/* ---- P3-03 统一错误提示条：底部固定，error/warn/info 三级 + 重试/关闭 ---- */
.fail-host{position:fixed;left:16px;right:16px;bottom:16px;z-index:60;max-width:1296px;margin:0 auto;display:flex;flex-direction:column;gap:8px;pointer-events:none}
.fail-bar{position:fixed;left:16px;right:16px;bottom:16px;z-index:60;max-width:1296px;margin:0 auto;display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid var(--line);border-left-width:4px;border-radius:8px;background:var(--paper);color:var(--ink);font-size:13px;line-height:1.5;box-shadow:0 10px 26px rgba(42,31,21,.16);pointer-events:auto}
.fail-host .fail-bar{position:static;left:auto;right:auto;bottom:auto;margin:0;max-width:none;width:100%}
.fail-error{border-left-color:var(--accent);background:#fdf3f1}
.fail-warn{border-left-color:var(--gold);background:#fdf8ee}
.fail-info{border-left-color:var(--blue);background:#f4f7fa}
.fail-msg{flex:1 1 auto;min-width:0}
.fail-acts{display:flex;gap:8px;align-items:center;flex-shrink:0}
.fail-act{border:1px solid var(--line);background:var(--paper);color:var(--ink);border-radius:6px;padding:4px 12px;white-space:nowrap}
.fail-act:hover{border-color:var(--accent);color:var(--accent)}
.fail-act:disabled{opacity:.6;cursor:default}
.fail-close{border:0;background:transparent;color:var(--muted);font-size:16px;line-height:1;padding:2px 6px;border-radius:4px}
.fail-close:hover{background:var(--wash);color:var(--ink)}
@media(max-width:640px){.fail-host{left:10px;right:10px;bottom:10px}.fail-bar{left:10px;right:10px;bottom:10px;flex-wrap:wrap}}
@media print{.fail-host,.fail-bar{display:none}}

/* ===== 洞察联动 =====
   正文里的人物/地点/事件由 linkifyInsight() 包成按钮（.ins-link），
   详情页的「相关洞察」是 .ins-chip；三种实体用下划线样式与颜色区分，
   避免读者把地名误当人名。--disc 由各节内联设置，人物链接直接继承学科色。 */
.insight-sec .ins-link{display:inline;padding:0;margin:0;border:0;background:none;font:inherit;
  color:var(--disc,#8d3025);cursor:pointer;
  text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}
.insight-sec .ins-link:hover,.insight-sec .ins-link:focus-visible{
  text-decoration-style:solid;background:rgba(0,0,0,.05);outline:none}
.insight-sec .ins-link.ins-l{color:#2e7d64;text-decoration-style:dashed}
.insight-sec .ins-link.ins-e{color:#6a4b9c;text-decoration-style:wavy}
.ins-chips{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 0}
.ins-chip{font:inherit;font-size:12px;line-height:1.7;padding:3px 10px;border-radius:999px;cursor:pointer;
  border:1px solid rgba(141,48,37,.32);background:rgba(141,48,37,.06);color:#8d3025}
.ins-chip:hover,.ins-chip:focus-visible{background:rgba(141,48,37,.14);outline:none}
.ins-hl{animation:ins-hl 1.8s ease-out}
@keyframes ins-hl{from{background:rgba(184,139,53,.26)}to{background:transparent}}
