/* Topic network: Explore map and the reading-page neighbourhood share these rules. Site palette is light-only. */
.tn{--tn-bg:#fffcf7;--tn-panel:#fff;--tn-fg:#2c2924;--tn-muted:#736859;--tn-faint:#a89b8a;--tn-line:#e6dccf;--tn-edge:#c4b6a4;--tn-accent:#b54a17;--tn-soft:#fbeee5;--tn-shadow:0 1px 2px rgba(60,40,20,.06),0 6px 18px rgba(60,40,20,.08);--tn-serif:Georgia,"Times New Roman",serif;color:var(--tn-fg);font-family:system-ui,-apple-system,"PingFang SC","Hiragino Sans GB","Noto Sans SC","Microsoft YaHei",sans-serif}
.tn *{box-sizing:border-box}
.tn button{font-family:inherit}
.tn-map{background:var(--tn-panel);border:1px solid var(--tn-line);border-radius:14px;overflow:hidden;margin:1.25rem 0 2rem}
.tn-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 14px;padding:10px 14px;border-bottom:1px solid var(--tn-line);font-size:13px;color:var(--tn-muted);position:relative;z-index:9;background:var(--tn-panel)}
.tn-crumbs{display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center;min-width:0}
.tn-crumbs button{appearance:none;border:0;background:none;font:inherit;color:var(--tn-accent);cursor:pointer;padding:2px 4px;border-radius:4px}
.tn-crumbs .sep,.tn-crumbs .lbl{color:var(--tn-faint)}
.tn-crumbs .here{color:var(--tn-fg);font-weight:600}
.tn-crumbs button.here{color:var(--tn-fg);cursor:default}
.tn-search{position:relative;flex:0 1 300px;min-width:180px}
.tn-search input{width:100%;font:inherit;font-size:14px;padding:7px 12px;border:1px solid var(--tn-line);border-radius:8px;background:var(--tn-bg);color:var(--tn-fg)}
.tn-results{position:absolute;left:0;right:0;top:calc(100% + 4px);background:var(--tn-panel);border:1px solid var(--tn-line);border-radius:10px;box-shadow:var(--tn-shadow);overflow:hidden}
.tn-results button{display:flex;gap:8px;align-items:baseline;width:100%;text-align:left;appearance:none;border:0;background:none;font-size:13px;color:var(--tn-fg);padding:8px 12px;cursor:pointer}
.tn-results button:hover,.tn-results button.on{background:var(--tn-soft)}
.tn-results i{width:7px;height:7px;border-radius:50%;background:var(--rc);flex:none;align-self:center}
.tn-results small{color:var(--tn-muted);margin-left:auto;white-space:nowrap}
.tn-results p{margin:0;padding:8px 12px;font-size:13px}
.tn-wrap{position:relative}
.tn-canvas{position:relative;height:min(72vh,720px);min-height:440px;overflow:hidden;cursor:grab;touch-action:none;background:var(--tn-panel)}
.tn-canvas.dragging{cursor:grabbing}
.tn-loading{position:absolute;inset:0;display:grid;place-items:center;margin:0;color:var(--tn-muted);font-size:14px}
.tn-stage{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}
.tn-stage svg{position:absolute;left:0;top:0;overflow:visible}
.tn-field{fill:color-mix(in srgb,var(--rc) 6%,#fff);stroke:color-mix(in srgb,var(--rc) 25%,#fff);vector-effect:non-scaling-stroke}
.tn-group{fill:none;stroke:color-mix(in srgb,var(--rc) 22%,#fff);stroke-dasharray:3 4;vector-effect:non-scaling-stroke}
.tn-canvas[data-lod="0"] .tn-group,.tn-canvas[data-lod="0"] .tn-glabel{display:none}
.tn-flabel,.tn-glabel{position:absolute;transform-origin:0 0;transform:scale(var(--inv,1));white-space:nowrap;color:var(--rc);font-weight:700;cursor:pointer;appearance:none;border:0;line-height:1.5;background:color-mix(in srgb,#fff 85%,transparent);border-radius:6px}
.tn-flabel{font-size:15px;letter-spacing:.04em;padding:1px 8px;z-index:5}
.tn-flabel span{font-weight:400;color:var(--tn-muted);margin-left:6px;font-size:12px}
.tn-glabel{font-size:12px;padding:0 6px;z-index:4;max-width:none}
.tn-flabel:hover,.tn-glabel:hover{text-decoration:underline}
.tn-edge{fill:none;stroke:var(--tn-edge);stroke-width:1.3;vector-effect:non-scaling-stroke}
.tn-agg{fill:none;stroke:var(--tn-edge);stroke-linecap:round;vector-effect:non-scaling-stroke;opacity:.55}
.tn-canvas[data-lod="2"] .tn-agg,.tn-canvas[data-lod="0"] .tn-agg{display:none}
.tn-canvas:not([data-lod="2"]) .tn-edge:not(.hl){display:none}
.hovering .tn-edge,.hovering .tn-agg{opacity:.12}
.hovering .tn-edge.hl{opacity:1;stroke:var(--tn-fg);stroke-width:1.8}
.tn-pill{position:absolute;height:30px;display:flex;align-items:center;gap:7px;padding:0 12px 0 10px;border-radius:15px;border:1px solid color-mix(in srgb,var(--rc) 40%,#fff);background:#fff;color:var(--tn-fg);font-weight:600;font-size:13px;line-height:1;white-space:nowrap;cursor:pointer;transform:translate(-50%,-50%) scale(var(--inv,1));z-index:2}
.tn-pill i{width:7px;height:7px;border-radius:50%;background:var(--rc);flex:none}
.tn-pill:hover,.tn-pill.hl-self{background:color-mix(in srgb,var(--rc) 12%,#fff);box-shadow:var(--tn-shadow);z-index:4}
.tn-canvas[data-lod="0"] .tn-pill:not(.hl-self):not(.g),.tn-canvas[data-lod="1"] .tn-pill:not(.lm):not(.hl-self):not(.g){padding:0;width:13px;height:13px;border-color:transparent;background:transparent;box-shadow:none;justify-content:center}
.tn-canvas[data-lod="0"] .tn-pill:not(.hl-self):not(.g) span,.tn-canvas[data-lod="1"] .tn-pill:not(.lm):not(.hl-self):not(.g) span{display:none}
.hovering .tn-pill{opacity:.25}
.hovering .tn-pill.hl,.hovering .tn-pill.hl-self{opacity:1;z-index:4}
.hovering .tn-pill.hl i{transform:scale(1.6)}
.tn-port{position:absolute;transform:translate(-50%,-50%) scale(var(--inv,1));display:flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:11px;border:1px solid color-mix(in srgb,var(--rc) 50%,#fff);background:#fff;color:var(--tn-fg);font-weight:600;font-size:11px;line-height:1;white-space:nowrap;cursor:pointer;z-index:5}
.tn-port i{width:7px;height:7px;border-radius:50%;background:var(--rc);flex:none}
.tn-port span{color:var(--tn-muted);font-weight:500}
.tn-canvas[data-lod="0"] .tn-port{padding:0;width:11px;height:11px;border-radius:50%;border:2px solid #fff;background:var(--rc)}
.tn-canvas[data-lod="0"] .tn-port>*{display:none}
.tn-canvas[data-lod="1"] .tn-port:not(.hl) b{display:none}
.tn-port:hover,.tn-port.hl{background:color-mix(in srgb,var(--rc) 14%,#fff);border-color:var(--rc)}
.hovering .tn-port:not(.hl){opacity:.25}
.tn-hl path,.tn-gl line,.tn-gl path{fill:none;vector-effect:non-scaling-stroke;stroke-linecap:round}
.tn-hl .fan{stroke:var(--tn-fg);stroke-width:1.2;opacity:.5}
.tn-hl .trunk{stroke:var(--tn-fg);opacity:.42}
.tn-card{position:absolute;z-index:10;max-width:300px;background:#fff;border:1px solid var(--tn-line);border-radius:10px;padding:10px 12px;box-shadow:var(--tn-shadow);font-size:13px;line-height:1.5;pointer-events:none}
.tn-card strong{display:block;font-size:14px;margin-bottom:2px}
.tn-card span{color:var(--tn-muted)}
.tn-card .tn-why{color:var(--tn-fg)}
.tn-zoom{position:absolute;right:12px;bottom:12px;display:flex;flex-direction:column;gap:6px;z-index:8}
.tn-zoom button{appearance:none;width:36px;height:36px;border-radius:9px;border:1px solid var(--tn-line);background:#fff;color:var(--tn-fg);font-weight:600;font-size:16px;line-height:1;cursor:pointer;box-shadow:var(--tn-shadow)}
.tn-zoom button.fit{font-size:11px}
.tn-lod{position:absolute;left:12px;bottom:12px;z-index:8;font-size:12px;color:var(--tn-muted);background:color-mix(in srgb,#fff 85%,transparent);border:1px solid var(--tn-line);border-radius:999px;padding:4px 10px;pointer-events:none}
.tn-lod:empty{display:none}
.tn-legend{display:flex;flex-wrap:wrap;gap:6px 18px;padding:10px 14px;border-top:1px solid var(--tn-line);font-size:13px}
.tn-legend a,.tn-legend span{display:inline-flex;align-items:center;gap:6px;color:var(--tn-fg);text-decoration:none}
.tn-legend a:hover{color:var(--tn-accent);text-decoration:underline}
.tn-legend i{width:8px;height:8px;border-radius:50%;background:var(--rc)}
.tn-foot{padding:10px 14px;border-top:1px solid var(--tn-line);font-size:12px;color:var(--tn-muted);margin:0}
.tn button:focus-visible,.tn input:focus-visible,.tn summary:focus-visible,.tn a:focus-visible{outline:2px solid var(--tn-accent);outline-offset:2px}

/* gathered */
.tn-pill,.tn-field,.tn-group,.tn-flabel,.tn-glabel,.tn-port,.tn-edge,.tn-agg{transition:opacity .35s}
.gathered .tn-pill:not(.g){opacity:.07;pointer-events:none}
.gathered .tn-field,.gathered .tn-group{opacity:.3}
.gathered .tn-flabel,.gathered .tn-glabel,.gathered .tn-port,.gathered .tn-edge,.gathered .tn-agg{opacity:.08;pointer-events:none}
.gathered .tn-pill.g{z-index:3;transform:translate(-50%,-50%) scale(var(--ginv,1))}
.tn-pill.gc{height:40px;padding:0 16px 0 13px;font-size:15px;border-width:2px;box-shadow:var(--tn-shadow);z-index:6!important;background:color-mix(in srgb,var(--rc) 14%,#fff)}
.tn-pill.gc i{width:9px;height:9px}
.tn-pill.g2{font-weight:500;color:var(--tn-muted);border-style:dashed}
.tn-pill.hot{box-shadow:0 0 0 4px color-mix(in srgb,var(--rc) 30%,transparent);color:var(--tn-fg)}
.tn-gl .gl1{stroke:color-mix(in srgb,var(--rc) 75%,#2c2924);stroke-width:1.8;opacity:.7}
.tn-gl .gl11{stroke:var(--tn-faint);stroke-width:1.1;stroke-dasharray:3 4;opacity:.8}
.tn-gl .gl2{stroke:var(--tn-edge);stroke-width:1}
.tn-gl .hot{stroke-width:3.4;opacity:1}
.tn-bands .band{fill:none;stroke:var(--rc);stroke-linecap:round;opacity:.1}
.tn-bands .bandlbl{fill:var(--rc);font:700 13px system-ui,sans-serif;letter-spacing:.04em}

/* side panel (Explore) */
.tn-panel{position:absolute;top:12px;right:12px;bottom:12px;width:min(360px,40%);background:#fff;border:1px solid var(--tn-line);border-radius:12px;box-shadow:var(--tn-shadow);overflow:auto;z-index:9;padding:16px 18px 20px}
.tn-wrap.gathered .tn-zoom{right:calc(min(360px,40%) + 28px)}
.tn-ph{display:flex;justify-content:space-between;align-items:center;gap:8px}
.tn-chip{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--rc)}
.tn-chip i,.tn-panel h4 i{width:7px;height:7px;border-radius:50%;background:var(--rc);display:inline-block}
.tn-x{appearance:none;border:1px solid var(--tn-line);background:var(--tn-bg);color:var(--tn-fg);width:30px;height:30px;border-radius:8px;font-size:18px;line-height:1;cursor:pointer}
.tn-title{font-size:19px;line-height:1.35;margin:6px 0;text-wrap:balance}
.tn-sum{margin:0 0 8px;color:var(--tn-muted);font-size:13.5px;line-height:1.6}
.tn-meta{font-size:12px;color:var(--tn-faint)}
.tn-meta a,.tn-open{color:var(--tn-accent);font-weight:600;text-decoration:none}
.tn-toggle{display:flex;gap:6px;align-items:center;font-size:12.5px;color:var(--tn-muted);margin:10px 0 4px;cursor:pointer}
.tn-panel h4{font-size:12px;letter-spacing:.06em;color:var(--rc);margin:16px 0 4px;display:flex;align-items:center;gap:6px}
.tn-item{padding:8px 10px;margin:0 -10px;border-radius:8px;transition:background .2s}
.tn-item.hot{background:color-mix(in srgb,var(--tn-line) 45%,#fff)}
.tn-go{appearance:none;border:0;background:none;padding:0;font-weight:600;font-size:14px;line-height:1.45;color:var(--tn-fg);text-align:left;cursor:pointer}
.tn-go:hover{color:var(--tn-accent)}
.tn-item small{display:block;color:var(--tn-faint);font-size:11.5px;margin-top:2px}
.tn-item p{margin:3px 0 0;font-size:13px;color:var(--tn-muted);line-height:1.55}
.tn-item summary{cursor:pointer;color:var(--tn-accent);font-size:12.5px;margin-top:4px;padding:0;border:0}
.tn-item details{border:0}
.tn-item figure{margin:8px 0 0;padding:6px 10px;border-left:2px solid var(--tn-line);background:none}
.tn-item blockquote{margin:0;font-family:var(--tn-serif);font-size:14px;line-height:1.5}
.tn-item figcaption{font-size:11.5px;margin-top:3px}
.tn-item figcaption a{color:var(--tn-muted)}

/* reading page neighbourhood */
.tn-local{margin:.25rem 0 0}
.tn-local:not(.tn-ready){display:none}
.tn-local.tn-ready + .rn-fallback{display:none}
.tn-local .tn-head{padding:0 0 8px;border:0;background:none}
.tn-local .tn-canvas{height:420px;min-height:0;border:1px solid var(--tn-line);border-radius:10px;background:radial-gradient(#e2d7c9 .7px,transparent .8px) 0 0/12px 12px,#fffdfa}
.tn-local .tn-field,.tn-local .tn-group,.tn-local .tn-flabel,.tn-local .tn-glabel,.tn-local .tn-port,.tn-local .tn-edge,.tn-local .tn-agg,.tn-local .tn-pill:not(.g){display:none}
.tn-local .tn-panel{position:static;width:auto;border:0;box-shadow:none;padding:12px 0 0;background:none;overflow:visible}
.tn-local .tn-wrap.gathered .tn-zoom{right:12px}
.tn-local .tn-foot{border:0;padding:8px 0 0}
.tn-back{appearance:none;border:1px solid var(--tn-line);background:var(--tn-bg);color:var(--tn-accent);border-radius:999px;padding:3px 10px;font-size:12.5px;cursor:pointer}
.tn-local .tn-title{font-size:16px}
.tn-local .tn-panel h4{margin-top:12px}
.rn-fields{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:10px}

@media (max-width:760px){
 .tn-panel{position:static;width:auto;border-radius:0;border-width:1px 0 0;box-shadow:none}
 .tn-wrap.gathered .tn-zoom{right:12px}
 .tn-search{flex-basis:100%}
 .tn-canvas{height:62vh;min-height:380px}
 .tn-local .tn-canvas{height:360px}
}
@media (prefers-reduced-motion:reduce){.tn *{transition:none!important}}
