/* 晋世翔 · 种相：13 世纪的抄本。羊皮纸一页页浮在幽暗的介质里；毛笔楷书的标题，哥特体的拉丁字，
   红蓝相间、带细笔花饰的首字母；从首字母与眼睛向外播散的一圈圈红线蓝线，是培根说的“种相”。 */
.c-jin-shixiang {
  --medium: #1b1612; --bg: #1b1612; --paper: #efe3c6; --vellum: #efe3c6; --vellum-2: #e2d0a9; --mini: #f6ecd5;
  --ink: #2a1f17; --ink-2: #4c3c2e; --ink-3: #6b5744; --rule: rgba(42, 31, 23, .2);
  --red: #b0301e; --blue: #1f3f8f; --gold: #a8863f; --acc: #b0301e; --acc-ink: #fff8ec;
  --head: "Ma Shan Zheng", "Noto Serif SC", serif; --body: "Noto Serif SC", "Songti SC", serif; --goth: "Texturina", "Noto Serif SC", serif;
  --bar-bg: rgba(27, 22, 18, .93); --bar-ink: #eadcbd; --chip-bg: rgba(255, 250, 238, .75); --chip-ring: #efe3c6;
  --on-dark: #e6d6b4; --on-dark-2: #b8a687;
  background-color: var(--medium);
  background-image: radial-gradient(ellipse 60% 40% at 50% 0%, rgba(176, 48, 30, .07), transparent 70%),
    radial-gradient(ellipse 50% 50% at 100% 60%, rgba(31, 63, 143, .08), transparent 70%);
  background-attachment: fixed;
}
.c-jin-shixiang main [hidden] { display: none !important; }
.c-jin-shixiang .dlg { --dlg-bg: #ece0c4; --dlg-paper: #f8f0de; --dlg-me: #1f3f8f; --dlg-me-ink: #fbf5e8; --dlg-acc: #b0301e; }
.c-jin-shixiang .c3bar { border-bottom: 1px solid rgba(230, 214, 180, .2); }
.c-jin-shixiang .c3bar__t a, .c-jin-shixiang .c3bar__t span, .c-jin-shixiang .c3bar__nav a { color: var(--on-dark); }
.c-jin-shixiang .skip { background: var(--vellum); color: var(--ink); }
.c-jin-shixiang .mk { font-size: 12.5px; letter-spacing: .16em; color: var(--red); }
.c-jin-shixiang .sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* 目录：页边一列小写罗马数字 */
.c-jin-shixiang .c3toc a { color: var(--on-dark-2); font-family: var(--goth); font-size: 14px; }
.c-jin-shixiang .c3toc a span { font-family: var(--body); font-size: 12.5px; color: var(--on-dark); }
.c-jin-shixiang .c3toc a::after { width: 7px; height: 7px; border-radius: 0; border: 1px solid currentColor; transform: rotate(45deg); }
.c-jin-shixiang .c3toc a[aria-current="true"] { color: #f0c27a; }
.c-jin-shixiang .c3toc a[aria-current="true"]::after { background: var(--red); border-color: #f0c27a; }

/* ---------- 羊皮纸 ---------- */
.c-jin-shixiang .c3hero, .c-jin-shixiang .c3q, .c-jin-shixiang .c3end { display: block; padding: calc(var(--bar) + 28px) clamp(10px, 3vw, 48px) 34px; min-height: 0; }
.js-folio { --rm: 26px; position: relative; max-width: 1200px; margin: 0 auto; padding: 30px clamp(20px, 4.4vw, 64px) 40px; color: var(--ink); background-color: var(--vellum);
  background-image:
    linear-gradient(90deg, transparent var(--rm), rgba(150, 95, 60, .26) var(--rm) calc(var(--rm) + 1px), transparent calc(var(--rm) + 1px) calc(100% - var(--rm) - 1px), rgba(150, 95, 60, .26) calc(100% - var(--rm) - 1px) calc(100% - var(--rm)), transparent calc(100% - var(--rm))),
    linear-gradient(transparent 22px, rgba(150, 95, 60, .2) 22px 23px, transparent 23px calc(100% - 23px), rgba(150, 95, 60, .2) calc(100% - 23px) calc(100% - 22px), transparent calc(100% - 22px)),
    radial-gradient(ellipse 70% 55% at 50% 45%, rgba(255, 250, 236, .55), transparent 75%),
    radial-gradient(ellipse 40% 35% at 0% 0%, rgba(128, 92, 50, .2), transparent 70%),
    radial-gradient(ellipse 45% 40% at 100% 100%, rgba(128, 92, 50, .22), transparent 70%),
    radial-gradient(ellipse 30% 25% at 85% 8%, rgba(128, 92, 50, .1), transparent 70%);
  border-radius: 3px 2px 4px 2px; box-shadow: 0 0 0 1px rgba(0, 0, 0, .25), 0 28px 60px rgba(0, 0, 0, .5); }
.js-rh { display: grid; grid-template-columns: 1fr auto 1fr; align-items: baseline; gap: 12px; margin: 0 0 18px; font-size: 13px; color: var(--red); }
.js-rh span:nth-child(2) { font-family: var(--goth); font-style: italic; font-size: 16px; color: var(--blue); }
.js-rh span:nth-child(3) { text-align: right; font-family: var(--goth); font-size: 15px; color: var(--ink-2); }

/* 红蓝首字母 */
.js-ini { position: relative; display: inline-grid; place-items: center; vertical-align: top; }
.js-ini b { position: relative; z-index: 1; font-family: "Noto Serif SC", serif; font-weight: 900; line-height: 1; }
.js-ini::before { content: ""; position: absolute; inset: 0; border: 1.5px solid var(--fil); outline: 1px dotted var(--fil); outline-offset: -6px;
  background: radial-gradient(circle at 0 0, var(--fil) 0 2.4px, transparent 2.8px) 0 0 / 50% 50%; opacity: .9; }
.js-ini::after { content: ""; position: absolute; left: -12px; top: 30%; width: 1px; height: var(--tail, 90px);
  background: repeating-linear-gradient(var(--fil) 0 6px, transparent 6px 9px); opacity: .75; }
.js-ini--blue { --fil: var(--red); color: var(--blue); }
.js-ini--red { --fil: var(--blue); color: var(--red); }
.js-ini--xl { width: 1.18em; height: 1.18em; margin-right: .08em; --tail: 150px; }
.js-ini--xl b { font-size: .92em; }
.js-ini--sm { float: left; width: 64px; height: 64px; margin: 6px 12px 0 0; font-size: 44px; --tail: 54px; }

/* ---------- 首屏 ---------- */
.js-folio--hero { overflow: hidden; isolation: isolate; }
.js-folio--hero .js-rh { position: relative; }
.js-hero { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 440px); gap: clamp(26px, 4vw, 60px); align-items: start; }
.js-name { margin: 0; display: flex; align-items: flex-end; font-family: var(--head); font-weight: 400; font-size: clamp(66px, 8.6vw, 124px); line-height: 1; color: var(--ink); }
.js-en { margin: 14px 0 14px; font-family: var(--goth); font-size: 25px; color: var(--blue); }
.js-who { margin: 0 0 4px; font-size: 19px; font-weight: 700; line-height: 1.6; }
.js-now { margin: 0 0 14px; font-size: 15px; line-height: 1.7; color: var(--ink-2); }
.js-rep { margin: 0 0 14px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 10px; }
.js-rep .mk { margin: 0; }
.js-rep a { font-size: 18px; font-weight: 700; color: var(--ink); text-decoration: none; border-bottom: 1px solid var(--red); }
.js-rep a:hover { color: var(--red); }
.js-rep small { flex-basis: 100%; font-size: 13px; color: var(--ink-3); }
.js-rel { margin: 0 0 16px; padding: 12px 14px; border-left: 3px solid var(--blue); background: rgba(255, 250, 236, .55); }
.js-rel p { margin: 0; font-size: 15px; line-height: 1.8; }
.js-rel .mk { margin-bottom: 4px; }
.js-q ol { list-style: none; margin: 0; padding: 0; counter-reset: q; }
.js-q li { counter-increment: q; }
.js-q li a { position: relative; display: grid; grid-template-columns: 3.2em minmax(0, 1fr); gap: 8px; padding: 4px 0 4px 22px; text-decoration: none; font-size: 15px; line-height: 1.5; border-bottom: 1px solid rgba(42, 31, 23, .1); }
.js-q li a::before { content: "¶"; position: absolute; left: 0; top: 3px; font-weight: 700; color: var(--red); }
.js-q li:nth-child(even) a::before { color: var(--blue); }
.js-q li a b { font-family: var(--goth); font-weight: 600; font-size: 15px; color: var(--red); }
.js-q li a:hover span { text-decoration: underline; text-decoration-color: var(--red); text-underline-offset: .2em; }
.js-go { margin: 18px 0 0; }
.c-jin-shixiang .c3-btn { border-radius: 0; min-height: 40px; font-size: 14px; }
.c-jin-shixiang .c3-btn--go { background: var(--blue); border-color: var(--blue); color: #fbf5e8; }
.c-jin-shixiang .c3-btn--deep { background: transparent; color: var(--red); border-color: var(--red); }
.c-jin-shixiang .c3-btn--wm { color: var(--ink-2); border-color: var(--rule); }

/* 种相：从首字母向外播散（脚本画） */
.js-rip { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; z-index: -1; }
.js-rip circle { fill: none; stroke-width: 1.2; }

/* 三种视觉 */
.js-vis { margin: 0; }
.js-vis__pic { position: relative; line-height: 0; }
.js-vis__pic img { display: block; width: 100%; height: auto; mix-blend-mode: multiply; }
.js-vis__svg { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; }
.js-vis__fog { fill: rgba(239, 227, 198, .84); opacity: 0; transition: opacity .45s; }
.js-vis.is-on .js-vis__fog { opacity: 1; }
.js-vis__ray { display: none; }
.js-vis__ray.is-on { display: inline; }
.js-vis__ray path { fill: none; stroke: var(--red); stroke-width: 3; stroke-dasharray: 9 6; vector-effect: non-scaling-stroke; stroke-linecap: round; animation: js-dash 1.2s linear infinite; }
@keyframes js-dash { to { stroke-dashoffset: -30; } }
.js-vis__ctl { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.js-vis figcaption { margin-top: 8px; font-size: 12.5px; line-height: 1.6; color: var(--ink-3); }

/* 首屏下的履历、成就、著作 */
.js-folio--band { margin-top: 22px; padding-top: 34px; }
.js-band { display: grid; grid-template-columns: 1.2fr 1fr 1fr; gap: 34px; }
.js-facts { margin: 0; font-size: 14.5px; line-height: 1.85; color: var(--ink-2); }
.js-mk2 { margin-top: 18px !important; }
.c-jin-shixiang .c3-feats { margin: 0; padding: 0; list-style: none; counter-reset: f; }
.c-jin-shixiang .c3-feats li { counter-increment: f; position: relative; padding: 5px 0 5px 30px; font-size: 14.5px; line-height: 1.6; border-bottom: 1px solid rgba(42, 31, 23, .1); }
.c-jin-shixiang .c3-feats li::before { content: counter(f, lower-roman) "."; position: absolute; left: 0; top: 5px; font-family: var(--goth); font-weight: 600; color: var(--red); }
.c-jin-shixiang .c3-feats li:nth-child(even)::before { color: var(--blue); }
.c-jin-shixiang .c3-books li, .c-jin-shixiang .c3-links li { font-size: 14.5px; border-bottom: 1px solid rgba(42, 31, 23, .1); }
.c-jin-shixiang .c3-books a, .c-jin-shixiang .c3-links a, .c-jin-shixiang .c3-works a { text-decoration-color: var(--red); text-underline-offset: .2em; }

/* ---------- 每一问 ---------- */
.js-sec { display: grid; gap: 14px clamp(28px, 4vw, 60px); align-items: start;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); grid-template-areas: "head art" "body art"; grid-template-rows: auto 1fr; }
.js-sec--l { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); grid-template-areas: "art head" "art body"; }
.js-sec__head { grid-area: head; }
.js-sec__art { grid-area: art; }
.js-sec__body { grid-area: body; }
.c-jin-shixiang .c3q__when { gap: 12px; }
.c-jin-shixiang .c3q__when b { font-family: var(--goth); font-weight: 600; font-size: 30px; color: var(--red); }
.c-jin-shixiang .c3q__when span { color: var(--ink-2); }
.c-jin-shixiang .c3q__q { margin: 4px 0 14px; font-family: var(--head); font-weight: 400; font-size: clamp(32px, 3.7vw, 50px); line-height: 1.25; color: var(--ink); }
.c-jin-shixiang .c3q__lede { margin: 0; font-size: 16.5px; line-height: 1.95; text-align: justify; }
.c-jin-shixiang .c3-quote { position: relative; margin: 6px 0 16px; padding: 4px 0 4px 26px; border-left: 0; }
.c-jin-shixiang .c3-quote::before { content: "¶"; position: absolute; left: 0; top: 2px; font-size: 22px; font-weight: 700; color: var(--blue); line-height: 1.3; }
.c-jin-shixiang .c3-quote blockquote p { color: var(--red); font-size: 17.5px; line-height: 1.75; }
.c-jin-shixiang .c3-orig { color: var(--ink-2); }
.c-jin-shixiang .c3-tags li { border-radius: 0; border: 0; border-left: 2px solid var(--red); padding: 0 8px; background: rgba(255, 250, 236, .6); color: var(--ink-2); }
.c-jin-shixiang .c3-tags li:nth-child(even) { border-left-color: var(--blue); }
.c-jin-shixiang .talk { border-radius: 2px; border-color: var(--ink); background: rgba(255, 250, 238, .75); }
.c-jin-shixiang .c3-ask { border-radius: 0; border: 1px solid var(--rule); background: rgba(255, 250, 236, .6); }
.c-jin-shixiang .c3-deeplink { color: var(--blue); }

/* 小图（机关的框：蓝红双线，四角小方块） */
.js-mini { position: relative; padding: 18px 18px 16px; background: var(--mini); border: 2px solid var(--blue); box-shadow: inset 0 0 0 4px var(--mini), inset 0 0 0 5px var(--red); }
.js-mini::before, .js-mini::after { content: ""; position: absolute; width: 12px; height: 12px; background: var(--red); border: 2px solid var(--mini); }
.js-mini::before { left: -7px; top: -7px; }
.js-mini::after { right: -7px; bottom: -7px; background: var(--blue); }
.js-kk { margin: 0 0 10px; display: flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 700; letter-spacing: .16em; color: var(--red); }
.js-kk::before { content: ""; width: 8px; height: 8px; background: var(--blue); transform: rotate(45deg); }
.js-out { margin: 10px 0 0; min-height: 3.4em; font-size: 14.5px; line-height: 1.75; color: var(--ink-2); }
.js-cap { margin: 8px 0 0; font-size: 12.5px; line-height: 1.6; color: var(--ink-3); }
.c-jin-shixiang .js-mini button, .js-vis__ctl button {
  min-height: 40px; padding: 6px 13px; border: 1px solid var(--ink); border-radius: 0; background: transparent; color: var(--ink); font: inherit; font-size: 14px; line-height: 1.3; cursor: pointer; transition: background .2s, color .2s; }
.c-jin-shixiang .js-mini button:not([aria-pressed="true"]):not(:disabled):hover, .js-vis__ctl button:not([aria-pressed="true"]):hover { background: rgba(42, 31, 23, .07); }
.c-jin-shixiang .js-mini .js-sp__obj, .c-jin-shixiang .js-mini .js-sp__eye { min-height: 0; padding: 0; border: 0; background: transparent; }
.c-jin-shixiang .js-mini button[aria-pressed="true"], .c-jin-shixiang .js-vis__ctl button[aria-pressed="true"] { background: var(--blue); border-color: var(--blue); color: #fbf5e8; }
.c-jin-shixiang .js-mini button:disabled { cursor: default; opacity: .7; }
.js-fig { margin: 22px 0 0; }
.js-fig img { display: block; width: 100%; height: auto; mix-blend-mode: multiply; }
.js-fig figcaption { margin-top: 8px; font-size: 12.5px; line-height: 1.6; color: var(--ink-3); }
.js-fig--eye { max-width: 330px; }
.js-fig--page { max-width: 340px; }
.js-range { display: flex; align-items: center; gap: 12px; margin-top: 10px; font-size: 14px; color: var(--ink-2); }
.js-range input { flex: 1; height: 40px; accent-color: var(--red); cursor: pointer; }

/* 种相播殖 */
.js-sp__stage { position: relative; aspect-ratio: 640 / 400; background: #f4e9cf; border: 1px solid var(--rule); overflow: hidden; touch-action: pan-y; }
.js-sp__cv, .js-sp__svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.js-sp__static circle { fill: none; stroke: var(--red); stroke-width: 1; opacity: .35; }
.js-sp__static circle:nth-child(even) { stroke: var(--blue); }
.js-sp.is-js .js-sp__static { display: none; }
.js-sp__cone line { stroke: var(--red); stroke-width: 1.4; stroke-dasharray: 5 4; opacity: 0; transition: opacity .3s; }
.js-sp.is-seen .js-sp__cone line { opacity: .9; }
.js-sp__obj, .js-sp__eye { position: absolute; z-index: 2; padding: 0; border: 0; background: transparent; cursor: grab; touch-action: none; transform: translate(-50%, -50%); }
.js-sp__obj { width: max(44px, 9%); aspect-ratio: 1; }
.js-sp__obj i { position: absolute; inset: 14%; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #e0644c, var(--red) 60%, #7e1f12); box-shadow: 0 0 0 2px var(--mini), 0 0 0 3px var(--red); }
.js-sp__obj span { position: absolute; left: 50%; top: 100%; transform: translateX(-50%); font-size: 13px; font-weight: 700; color: var(--red); }
.js-sp__eye { width: max(64px, 23%); aspect-ratio: 1; }
.js-sp__eye svg { width: 100%; height: 100%; overflow: visible; }
.js-sp__eye .e-out { fill: rgba(255, 255, 255, .55); stroke: var(--ink); stroke-width: 2; }
.js-sp__eye .e-cor, .js-sp__eye .e-uv { fill: none; stroke: var(--ink); stroke-width: 1.4; }
.js-sp__eye .e-gl { fill: var(--glow, rgba(176, 48, 30, 0)); stroke: var(--blue); stroke-width: 2; transition: fill .3s; }
.js-sp__eye .e-nerve { fill: none; stroke: var(--ink); stroke-width: 2; }
.js-sp__eye .e-pup { fill: none; stroke: var(--blue); stroke-width: 5; }
.js-sp__obj:focus-visible, .js-sp__eye:focus-visible { outline: 2px solid var(--blue); outline-offset: 3px; border-radius: 50%; }
.js-sp__ctl { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 0; }

/* 左右颠倒 */
.js-inv svg { display: block; width: 100%; height: auto; color: var(--ink-2); }
.js-inv .inv-r { fill: var(--red); stroke: var(--red); }
.js-inv .inv-b { fill: var(--blue); stroke: var(--blue); }
.js-inv .inv-rays path { fill: none; stroke-width: 2.6; stroke-linejoin: round; marker-end: url(#js-ar); }
.js-inv .inv-rays .inv-r { color: var(--red); }
.js-inv .inv-rays .inv-b { color: var(--blue); }
.js-inv .inv-l { font: 700 14px var(--body); }
.js-inv .inv-l--r { fill: var(--red); }
.js-inv .inv-l--b { fill: var(--blue); }
.js-inv .inv-gl { fill: rgba(255, 255, 255, .55); stroke: var(--ink); stroke-width: 1.8; }
.js-inv .inv-vit { fill: none; stroke: var(--ink); stroke-width: 1.8; stroke-dasharray: 5 3; }
.js-inv .inv-cen { fill: var(--ink); }
.js-inv .inv-k { font: 13px var(--body); fill: var(--ink-2); }
.js-inv .inv-ret { fill: none; stroke: var(--ink-3); stroke-width: 1.4; stroke-dasharray: 3 4; }
.js-inv :is(.inv-rays, .inv-img) { display: none; }
.js-inv[data-mode="cross"] :is(.inv-rays--cross, .inv-img--cross),
.js-inv[data-mode="kepler"] :is(.inv-rays--cross, .inv-img--cross),
.js-inv[data-mode="bend"] :is(.inv-rays--bend, .inv-img--bend) { display: inline; }
.js-inv:not([data-mode="kepler"]) .inv-k--ret { opacity: 0; }
.js-inv[data-mode="kepler"] .inv-ret { stroke: var(--ink); stroke-width: 2.4; stroke-dasharray: none; }
.js-inv__ctl, .js-unit__ctl, .js-cmp__sw { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }

/* 自然与技艺之间的墙 */
.js-wall svg { display: block; width: 100%; height: auto; }
.js-wall .w-lab { font: 400 26px var(--head); fill: var(--ink); }
.js-wall .w-form { fill: none; stroke: var(--blue); stroke-width: 1.6; stroke-dasharray: 6 4; }
.js-wall .w-k { font: 13px var(--body); fill: var(--ink-2); }
.js-wall .w-wall rect { fill: #a8957a; stroke: var(--ink); stroke-width: 1.2; }
.js-wall .w-dots circle { fill: var(--red); }
.js-wall .w-dots circle:nth-child(3n) { fill: var(--blue); }

/* 切不开的“一” */
.js-unit svg { display: block; width: 100%; height: auto; }
.js-unit .u-peb ellipse { fill: #ddd2bd; stroke: var(--ink); stroke-width: 2.2; }
.js-unit .u-peb .u-shine { fill: none; stroke: #fff; stroke-width: 3; stroke-linecap: round; opacity: .8; }
.js-unit .u-line { stroke: var(--ink); stroke-width: 7; stroke-linecap: round; }
.js-unit .u-ticks line { stroke: var(--ink); stroke-width: 2.4; }
.js-unit .u-fr text { font: 700 15px var(--body); fill: var(--blue); }
.js-unit .u-fr text.u-q { font-size: 12.5px; }
.js-unit .u-fr line { stroke: var(--red); stroke-width: 2.4; }
.js-unit .u-blade { fill: #cfc8bb; stroke: var(--ink); stroke-width: 1.6; }
.js-unit .u-hilt { fill: var(--red); stroke: var(--ink); stroke-width: 1.2; }
.js-unit .u-cap { font: 700 16px var(--body); fill: var(--blue); }
.js-unit[data-mode="plato"] .u-row--ari, .js-unit[data-mode="ari"] .u-row--plato { display: none; }
.c-jin-shixiang .js-unit .js-unit__cut { margin-left: auto; background: var(--red); border-color: var(--red); color: #fbf5e8; }
.c-jin-shixiang .js-unit .js-unit__cut:not(:disabled):hover { background: #8f2516; }
.c-jin-shixiang .js-unit .js-unit__cut:disabled { background: transparent; color: var(--ink-2); border-color: var(--rule); opacity: 1; }

/* 共时与非共时 */
.js-cmp__g { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) 54px minmax(0, 1fr); margin-top: 14px; }
.js-cmp__col--w { grid-column: 1; }
.js-cmp__col--e { grid-column: 3; }
.js-cmp__h { margin: 0 0 8px; font-family: var(--head); font-size: 22px; color: var(--ink); }
.js-cmp__col ol { list-style: none; margin: 0; padding: 0; }
.js-cmp__col li { position: relative; margin: 0 0 8px; padding: 6px 8px; border: 1px solid var(--rule); background: rgba(255, 252, 244, .7); font-size: 13.5px; line-height: 1.5; transition: transform .6s cubic-bezier(.3, .7, .3, 1), opacity .4s; }
.js-cmp__col li b { display: block; font-family: var(--goth); font-weight: 600; font-size: 13px; color: var(--red); }
.js-cmp__col--e li b { color: var(--blue); }
.js-cmp__col--e li { border-color: rgba(31, 63, 143, .35); }
.js-cmp__col--e li.is-off { border-style: dashed; background: transparent; }
.js-cmp__col--e li.is-off span { color: var(--ink-3); }
.js-cmp__links { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.js-cmp__links path { fill: none; stroke: var(--red); stroke-width: 1.8; }
.js-cmp__links path.is-broken { stroke: var(--ink-3); stroke-dasharray: 3 5; }
.js-cmp__links text { font: 700 12.5px var(--body); fill: var(--red); }

/* ---------- 结尾 ---------- */
.js-explicit { margin: 0; font-family: var(--goth); font-style: italic; font-size: 26px; color: var(--red); }
.js-end h2 { margin-top: 0; font-family: var(--head); font-weight: 400; font-size: clamp(32px, 4vw, 48px); }
.c-jin-shixiang .c3-lin li { border-radius: 0; border-color: var(--rule); background: rgba(255, 252, 244, .55); }
.c-jin-shixiang .c3end h3 { color: var(--blue); }

/* ---------- 窄屏 ---------- */
@media (max-width: 1300px) {
  .c-jin-shixiang .c3toc a b { display: none; }
}
@media (max-width: 1100px) {
  .js-hero { grid-template-columns: minmax(0, 1fr) minmax(0, 380px); }
  .js-band { grid-template-columns: 1fr 1fr; }
  .js-band__c:first-child { grid-column: 1 / -1; }
}
@media (max-width: 860px) {
  .js-hero { grid-template-columns: minmax(0, 1fr); }
  .js-vis { max-width: 520px; }
  .js-band { grid-template-columns: minmax(0, 1fr); gap: 22px; }
  .js-sec, .js-sec--l { grid-template-columns: minmax(0, 1fr); grid-template-areas: "head" "art" "body"; grid-template-rows: auto; }
}
@media (max-width: 560px) {
  /* SVG 里的字：视图缩小一半，字号翻倍 */
  .js-inv .inv-l { font-size: 24px; }
  .js-inv .inv-k { font-size: 22px; }
  .js-wall .w-lab { font-size: 40px; }
  .js-wall .w-k { font-size: 22px; }
  .js-unit .u-cap { font-size: 28px; }
  .js-unit .u-fr text { font-size: 26px; }
  .js-unit .u-fr text.u-q { font-size: 22px; }
  .js-sp__obj span { font-size: 12px; }
  .c-jin-shixiang .c3hero, .c-jin-shixiang .c3q, .c-jin-shixiang .c3end { padding-left: 8px; padding-right: 8px; padding-top: calc(var(--bar) + 16px); }
  .js-folio { --rm: 7px; padding: 24px 18px 30px; }
  .js-rh { grid-template-columns: 1fr auto; }
  .js-rh span:nth-child(2) { display: none; }
  .js-mini { padding: 14px 12px 14px; }
  .js-ini--sm { width: 54px; height: 54px; font-size: 36px; }
  .js-cmp__g { grid-template-columns: minmax(0, 1fr) 30px minmax(0, 1fr); }
  .js-cmp__col li { font-size: 12.5px; padding: 5px 6px; }
  .c-jin-shixiang .js-unit .js-unit__cut { margin-left: 0; }
}
