 :root{--paper:#f7f1e7;--ink:#29251f;--red:#8e2e26;--muted:#766f63;--line:#d7cbbb;--green:#315f55;--gold:#b98536}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:"Songti SC","STSong","Noto Serif CJK SC",serif;line-height:1.7}.site-header{height:72px;padding:0 clamp(24px,5vw,84px);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:sticky;top:0;background:rgba(247,241,231,.93);backdrop-filter:blur(10px);z-index:5}.brand{font-size:21px;color:var(--ink);text-decoration:none;font-weight:700;letter-spacing:.06em}.brand span{font-family:Georgia,serif;font-size:9px;letter-spacing:.16em;color:var(--red);margin-left:10px}nav{display:flex;gap:24px}nav a{color:var(--ink);text-decoration:none;font-size:15px}.hero{padding:clamp(80px,12vw,156px) clamp(24px,17vw,260px);background:radial-gradient(circle at 76% 30%,#e5d2a8 0,transparent 26%),linear-gradient(135deg,#ede0cb,var(--paper))}.eyebrow{font:600 11px/1.2 Arial,sans-serif;letter-spacing:.16em;color:var(--red);margin:0 0 14px}.hero h1,.section h2{font-size:clamp(36px,5vw,66px);line-height:1.2;letter-spacing:.05em;margin:0}.hero>p:not(.eyebrow){max-width:660px;font-size:19px;color:#514a40;margin:24px 0 32px}.hero-actions{display:flex;gap:12px}.button{display:inline-block;background:var(--red);color:#fff;text-decoration:none;padding:11px 21px;font-size:15px}.button.ghost{background:transparent;border:1px solid var(--red);color:var(--red)}.section{padding:90px clamp(24px,7vw,112px);border-top:1px solid var(--line)}.section-heading{max-width:760px;margin-bottom:38px}.section-heading h2{font-size:38px;margin-bottom:12px}.section-heading>p:not(.eyebrow){color:var(--muted);margin:0}.reader-layout{display:grid;grid-template-columns:minmax(230px,310px) 1fr;border:1px solid var(--line);min-height:680px;background:#fbf8f2}.toc-panel{padding:20px;border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}.toc-panel label{font-size:13px;margin-bottom:6px}.toc-panel select,.toc-panel input,.atlas-controls input{font:inherit;padding:9px;border:1px solid var(--line);background:#fffdf9;margin-bottom:18px}.toc-summary{font:13px/1.45 Arial,sans-serif;color:var(--muted);margin:-7px 0 10px}.toc-panel ol{margin:0 -8px;padding:0 12px 0 29px;overflow-y:scroll;scrollbar-gutter:stable;max-height:min(72vh,920px);min-height:570px}.toc-panel li{padding:7px 0 7px 3px;font-size:14px;border-bottom:1px solid #eee6da;cursor:pointer}.toc-panel li.active{color:var(--red);font-weight:700}.book-panel{min-width:0}.book-toolbar{font-family:Arial,sans-serif;font-size:13px;padding:14px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:12px;align-items:center}.book-toolbar button{font:inherit;padding:7px 10px;border:1px solid var(--line);background:transparent;cursor:pointer}.chapter-content{padding:clamp(28px,5vw,70px);font-size:18px;line-height:2;min-height:620px}.chapter-content h1{font-size:26px;line-height:1.45;margin:0 0 30px}.chapter-content .content{white-space:normal}.chapter-content br{content:"";display:block;margin:0 0 1.3em}.atlas-section{background:#efe6d7}.atlas-controls{border:1px solid var(--line);border-bottom:0;background:#fbf8f2;padding:14px 20px;display:flex;align-items:center;flex-wrap:wrap;gap:10px 18px}.atlas-search-label{font-size:14px;font-weight:700}.atlas-controls input{margin:0;width:220px}.filter-group{display:flex;gap:6px;flex-wrap:wrap}.filter{border:1px solid var(--line);background:transparent;padding:6px 10px;color:var(--ink);font:14px inherit;cursor:pointer}.filter.active,.filter:hover{color:#fff;background:var(--red);border-color:var(--red)}.graph-count{margin:0 0 0 auto;color:var(--muted);font-size:13px}.atlas-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;border:1px solid var(--line);background:#fbf8f2}.graph{min-height:620px;position:relative;overflow:hidden}.graph svg{display:block;width:100%;height:100%;min-height:620px}.graph .link{stroke:#a9a094;stroke-opacity:.75;stroke-width:1.4}.graph .link-label{font:12px "Songti SC",serif;fill:#665f55;pointer-events:none}.graph .node{cursor:pointer;outline:none}.graph .node circle{stroke:#fff8ed;stroke-width:3px}.graph .node.selected circle{stroke:var(--gold);stroke-width:5px}.graph .node circle.match{stroke:#29251f;stroke-width:4px}.graph .node text{font-size:14px;pointer-events:none;paint-order:stroke;stroke:#fbf8f2;stroke-width:4px;stroke-linejoin:round}.person-detail{padding:28px 23px;border-left:1px solid var(--line);background:#f8f2e8}.person-detail h3{font-size:25px;margin:8px 0}.person-detail h4{font-size:15px;margin:24px 0 6px}.person-detail p{font-size:15px;color:var(--muted)}.person-detail ul{list-style:none;margin:0;padding:0}.person-detail li{font-size:14px;padding:7px 0;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:8px}.person-detail li span{color:var(--muted);text-align:right}.evidence{border-top:1px solid var(--line);margin-top:24px;padding-top:20px}.text-evidence{border-top:1px solid var(--line);margin-top:12px;padding-top:12px}.text-evidence h4{margin:0}.text-evidence p{font-size:13px;margin:5px 0 9px}.chapter-links{display:flex;flex-direction:column;gap:5px}.chapter-links button{border:1px solid var(--line);background:#fffdf9;color:var(--ink);font:13px/1.45 inherit;padding:6px 8px;text-align:left;cursor:pointer}.chapter-links button:hover{border-color:var(--red);color:var(--red)}.chapter-links small{color:var(--muted);white-space:nowrap}.evidence-note,.evidence-disclaimer{font-size:12px!important;line-height:1.55}.detail-kicker{font:600 11px Arial,sans-serif!important;letter-spacing:.14em;text-transform:uppercase;color:var(--red)!important}.about{max-width:none}.about>p:not(.eyebrow){max-width:800px;color:var(--muted)}footer{padding:28px clamp(24px,7vw,112px);font-size:13px;color:var(--muted);border-top:1px solid var(--line)}@media(max-width:760px){.site-header{height:60px}.brand span{display:none}nav{gap:14px;font-size:14px}.section{padding:60px 18px}.reader-layout,.atlas-layout{grid-template-columns:1fr}.toc-panel{border-right:0;border-bottom:1px solid var(--line)}.toc-panel ol{max-height:360px;min-height:180px}.chapter-content{font-size:17px}.atlas-controls{padding:13px}.atlas-controls input{width:100%}.graph-count{margin-left:0;width:100%}.person-detail{border-left:0;border-top:1px solid var(--line)}.graph,.graph svg{min-height:480px;height:480px}}

/* Immersive constellation view for the character atlas. */
.atlas-section{background:#071a45;color:#eaf2ff;position:relative;overflow:hidden}.atlas-section:before{content:"";position:absolute;inset:0;background-image:radial-gradient(#8fc5ff 1px,transparent 1.5px),radial-gradient(#fff 1px,transparent 1.5px),radial-gradient(circle at 30% 65%,#133e8a,transparent 35%);background-size:97px 97px,173px 173px,100% 100%;background-position:14px 32px,50px 15px,0 0;opacity:.48;pointer-events:none}.atlas-section>*{position:relative}.atlas-section .section-heading>p:not(.eyebrow),.atlas-section .section-heading h2{color:#f3f7ff}.atlas-section .eyebrow{color:#8bc7ff}.atlas-controls{border-color:#4f79b5;background:rgba(7,26,69,.8)}.atlas-controls input{border-color:#4f79b5;background:#0c285e;color:#fff}.atlas-controls input::placeholder{color:#a1bde8}.atlas-search-label,.graph-count{color:#dceaff}.filter{border-color:#517dbd;color:#dceaff}.filter.active,.filter:hover{background:#5d9efa;border-color:#8fc5ff}.atlas-layout{grid-template-columns:minmax(0,1fr) 350px;border-color:#4f79b5;background:#09235a}.graph{min-height:760px;background:radial-gradient(circle at center,#123a83 0,#092860 46%,#061638 100%);cursor:grab}.graph:active{cursor:grabbing}.graph svg{min-height:760px}.graph-caption{position:absolute;top:24px;left:26px;z-index:2;display:flex;flex-direction:column;gap:2px;color:#fff;text-shadow:0 1px 4px #000}.graph-caption b{font-size:20px}.graph-caption span{font:12px Arial,sans-serif;color:#9ebeea}.graph-actions{position:absolute;left:25px;bottom:25px;z-index:2;display:flex;gap:6px}.graph-actions button{border:1px solid #4f79b5;background:rgba(4,19,52,.8);color:#eaf2ff;padding:6px 11px;font:14px Arial,sans-serif;cursor:pointer}.graph-actions button:hover{background:#2354a0}.star-link{stroke:#609bef;stroke-width:1.2;opacity:.64}.star-link.muted{opacity:.1}.star-link.active{filter:url(#glow)}.star-link-label{font:12px "Songti SC",serif;fill:#c2e0ff;paint-order:stroke;stroke:#082356;stroke-width:4px}.star-node{cursor:pointer;transition:opacity .2s}.star-node.muted{opacity:.18}.node-halo{opacity:.23;filter:url(#glow)}.node-core{stroke:#e5f3ff;stroke-width:2.5;filter:url(#glow)}.star-node.selected .node-core,.star-node.center .node-core{stroke:#fff;stroke-width:4}.star-node text{font-size:15px;font-weight:700;fill:#f5f9ff;paint-order:stroke;stroke:#071a45;stroke-width:4px}.star-node .node-role{font-size:11px;font-weight:400;fill:#b9d5f6}.person-detail{position:relative;border-color:#4f79b5;background:#0c2a63;color:#eaf2ff;max-height:760px;overflow:auto}.person-detail h3,.person-detail h4{color:#fff}.person-detail p{color:#c2d7f4}.person-detail li{border-color:#315a9b}.person-detail li span{color:#a9c3e9}.person-detail .detail-kicker{color:#85c7ff!important}.character-list{margin-top:26px}.character-chip{display:grid;grid-template-columns:12px 1fr;column-gap:8px;width:100%;padding:8px 0;border:0;border-top:1px solid #315a9b;background:transparent;color:#eef6ff;text-align:left;font:14px inherit;cursor:pointer}.character-chip:hover,.character-chip.active{color:#92c9ff}.character-chip i{display:block;width:9px;height:9px;border-radius:50%;margin-top:7px;grid-row:span 2}.character-chip small{grid-column:2;color:#a9c3e9;font-size:11px}.close-detail{float:right;border:0;background:transparent;color:#b7d0f2;font-size:28px;line-height:1;cursor:pointer}.evidence,.text-evidence{border-color:#315a9b}.chapter-links button{border-color:#315a9b;background:#09245a;color:#eaf2ff}.chapter-links button:hover{border-color:#8bc7ff;color:#8bc7ff}@media(max-width:760px){.atlas-layout{grid-template-columns:1fr}.graph,.graph svg{min-height:600px;height:600px}.person-detail{max-height:none}.graph-caption{top:18px;left:18px}.graph-actions{left:18px;bottom:18px}}
