/* Novel detail page styles; keep page-only detail styles out of the HTML template. */
html{font-size:62.5%}
body.nd-page{--m:var(--m-novel)}

/* ============================================================
     页面专属：小说详情（noir 影院风）
     全部颜色走 noir.css token，--m=小说红，强调随频道色。
     ============================================================ */
  .nd-page{padding-bottom:calc(58px + env(safe-area-inset-bottom))}
  @media(min-width:860px){.nd-page{padding-bottom:0}}

  .nd-wrap{max-width:var(--maxw);margin:0 auto;padding:0 clamp(16px,5vw,72px)}

  /* —— 沉浸 Hero（对齐漫画详情的影院结构：内容高度、暗角渐隐到页底、玻璃统计条；单独设计·小说红调） —— */
  /* 下内距与 .nd-cols 的上内距是「统计条 ↔ 作品简介」之间那段空白的两个来源，
     两条加起来才是实际间隔（原来 H5 上是 28+20=48px），改间距要一起看 */
  .nd-hero{position:relative;overflow:hidden;isolation:isolate;
    padding:clamp(74px,11vw,128px) 0 clamp(16px,2.4vw,28px)}
  .nd-hero__bg{position:absolute;inset:0;z-index:0;pointer-events:none}
  .nd-hero__bg img{width:100%;height:100%;object-fit:cover;transform:scale(1.18);filter:blur(34px) saturate(1.2) brightness(.74)}
  .nd-hero__bg .nd-hero__fb{position:absolute;inset:0;background:var(--cover-fb)}
  .nd-hero__bg .nd-hero__fb--mock{background:linear-gradient(150deg,hsl(126,46%,52%),hsl(92,38%,26%))}
  .nd-hero__veil{position:absolute;inset:0;z-index:1;pointer-events:none;
    background:
      linear-gradient(0deg,rgba(8,8,12,.8) 0%,rgba(8,8,12,.34) 30%,transparent 58%),
      radial-gradient(120% 96% at 50% 0%,transparent 38%,var(--vignette) 100%),
      linear-gradient(180deg,var(--hero-veil-top) 0%,var(--hero-veil-mid) 36%,var(--hero-veil-bot) 78%,var(--paper) 100%)}
  .nd-hero__glow{position:absolute;z-index:1;inset:0;pointer-events:none;
    background:radial-gradient(680px 420px at 16% 8%,var(--hero-glow),transparent 62%)}
  /* 封面与右侧文案块顶/底对齐：整行 stretch；封面 align-self:flex-start 保持 2:3 不被拉伸 */
  .nd-hero__in{position:relative;z-index:2;display:flex;gap:clamp(20px,3.5vw,44px);align-items:stretch}

  /* 返回钮：PC 锚到内容容器左侧，H5 独占一行不遮封面 */
  .nd-hero__top{position:absolute;z-index:5;top:calc(var(--top-h, 58px) + 16px);left:50%;
    width:100%;max-width:var(--maxw);box-sizing:border-box;padding:0 clamp(16px,5vw,72px);
    transform:translateX(-50%);pointer-events:none;display:flex;align-items:center;gap:10px}
  .nd-back{position:static;pointer-events:auto;
    width:42px;height:42px;border-radius:50%;display:grid;place-items:center;color:#fff;
    background:rgba(10,10,16,.5);border:1px solid rgba(255,255,255,.18);
    backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:.2s}
  .nd-back:hover{background:var(--mc);border-color:var(--mc);box-shadow:0 0 26px -4px var(--mc)}
  /* 圆钮右边的「返回」二字：钮本身不变，只是后面跟一个同样可点的文字标签 */
  .nd-back__t{pointer-events:auto;cursor:pointer;color:#fff;font-size:15px;font-weight:600;
    letter-spacing:.02em;text-shadow:0 1px 8px rgba(0,0,0,.55)}


  /* Hero 封面（竖版 2/3，与频道海报/推荐卡同比例） */
  .nd-cover{flex:0 0 auto;align-self:flex-start;width:clamp(140px,24vw,232px);aspect-ratio:2/3;border-radius:12px;overflow:hidden;
    position:relative;background:var(--surface-2);box-shadow:var(--shadow-cover),0 0 0 1px rgba(255,255,255,.06)}
  .nd-cover img{width:100%;height:100%;object-fit:cover;position:relative;z-index:1}
  .nd-cover__fb{position:absolute;inset:0;z-index:0;display:grid;place-items:center;text-align:center;padding:12px;
    font-family:var(--font-serif);font-weight:700;font-size:15px;color:var(--cover-fb-ink);background:var(--cover-fb)}
  /* 连载状态角标：压封面左上角，z-index 要高于 img(1) */
  .nd-cover__st{position:absolute;z-index:2;top:8px;left:8px;display:flex;gap:5px;pointer-events:none}
  .nd-cover__st .nd-tag{height:24px;padding:0 9px;font-size:11px;
    -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}

  /* Hero 文案：纵向 flex，标题在顶、CTA 由 margin-top:auto 推到底，与封面顶/底对齐 */
  .nd-info{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;justify-content:space-between;gap:clamp(14px,1.8vw,20px)}
  .nd-kicker{display:inline-flex;align-items:center;gap:9px;font-family:var(--font-latin);font-style:italic;
    font-size:13px;letter-spacing:.16em;text-transform:uppercase;color:var(--on-cover);margin-bottom:12px}
  .nd-kicker::before{content:"";width:30px;height:1.5px;background:var(--mc);box-shadow:0 0 10px var(--mc)}
  .nd-kicker .badge{font-style:normal;font-family:var(--font-sans);letter-spacing:.02em;text-transform:none;
    font-size:11px;font-weight:800;padding:3px 10px;border-radius:var(--r-pill);
    background:var(--mc);color:#fff;box-shadow:0 0 18px -4px var(--mc)}
  .nd-info h1{margin:0;font-family:var(--font-serif);font-weight:900;line-height:1.12;color:var(--on-cover);
    letter-spacing:.005em;text-shadow:0 2px 30px rgba(0,0,0,.6);overflow-wrap:anywhere}
  /* 书名按字数分档缩放：2-8字大 / 9-16字中 / 17-28字小 / 29字以上最小档(nd-t4 无字数上限)。
     本页是书本身的详情主页(非扫读列表)，标题故意不裁切、不限行数，长书名就多换几行；
     线上库查证 novel_info.title 实际最长 100 字，nd-t4 最小字号下会换行较多但不会破版(overflow-wrap:anywhere 兜底) */
  /* 三个详情页(小说/漫画/有声)标题字号统一；视频详情页是影院版式，标题另算(.vd-title) */
  .nd-info h1.nd-t1{font-size:clamp(20px,3.2vw,32px);line-height:1.25}
  .nd-info h1.nd-t2{font-size:clamp(21px,3.2vw,36px)}
  .nd-info h1.nd-t3{font-size:clamp(18px,2.6vw,29px);line-height:1.22}
  .nd-info h1.nd-t4{font-size:clamp(16px,2.2vw,24px);line-height:1.3}
  .nd-author{display:flex;align-items:center;gap:10px;font-size:14px;color:rgba(255,255,255,.86)}
  /* 第4行 评分：五星 + 数值。PC 上钉到信息栏右上角(标题右侧的空白处)，H5 回落成正常的第 4 行 */
  .nd-score{display:flex;align-items:center;gap:8px;line-height:1}
  .nd-score__s{color:var(--gold);font-size:15px;letter-spacing:2px}
  .nd-score__s i{font-style:normal}
  .nd-score__s i.off{color:rgba(255,255,255,.26)}
  .nd-score b{font-family:var(--font-latin);font-weight:900;font-size:19px;color:var(--gold)}
  .nd-score em{font-style:normal;font-size:12.5px;color:rgba(255,255,255,.55)}
  @media(min-width:1000px){
    .nd-info{position:relative}
    .nd-score{position:absolute;top:0;right:0;margin:0;white-space:nowrap}
    /* 评分是脱离文档流的浮层，标题仍按整栏宽排版，长书名会直接从它底下穿过去(实测会盖住星星和分数)。
       所以标题右侧要留出评分那块的安全区：五星(5×15px + 字距) + gap + 分数/「暂无评分」≈145px，取 170px 留余量。
       用 padding-right 而不是 max-width：书名换行后第二行起也保持同一右边界，视觉上是一整块，不会忽宽忽窄。
       ⚠️ 改 .nd-score__s 的字号/字距或 .nd-score b 的字号时，这个 170px 要跟着重算。 */
    .nd-info h1{padding-right:170px}
  }
  /* 笔名可点：只是行内文字链，不做成按钮——它旁边就是「认领」「约稿」两个真按钮，再来一个胶囊会分不清主次 */
  .nd-author__lk{color:inherit;text-decoration:none;transition:color .15s}
  .nd-author__lk:hover{color:#fff;text-decoration:underline;text-underline-offset:3px}
  .nd-claim{height:24px;padding:0 12px;border-radius:var(--r-pill);font-size:12px;font-weight:700;cursor:pointer;
    color:rgba(255,255,255,.92);background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.32);
    backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:.15s}
  .nd-claim:hover{background:var(--mc);border-color:var(--mc);box-shadow:0 0 14px -4px var(--mc)}
  /* 约稿入口：与「认领」同形，只把强调色换成接稿绿，避免两个按钮同时出现时分不清 */
  .nd-claim--cms{color:#BFF3E6;border-color:rgba(123,224,198,.5);background:rgba(123,224,198,.14)}
  .nd-claim--cms:hover{background:var(--jade);border-color:var(--jade);color:#08221C;box-shadow:0 0 14px -4px var(--jade)}
  /* 暂不接稿：与「约稿」同形同位，但压暗且不带 hover/cursor——它是状态标记不是按钮，不能让人以为点得动 */
  .nd-author__cms{display:inline-flex;align-items:center;height:24px;padding:0 12px;border-radius:var(--r-pill);
    font-size:12px;font-weight:700;white-space:nowrap;color:rgba(255,255,255,.6);
    background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.18)}
  /* 约稿弹窗（纯展示：作者说明 + 去 APP 私聊的提示，无提交动作） */
  .nd-cms{padding:2px 2px 4px}
  .nd-cms__by{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:700;color:var(--jade)}
  .nd-cms__dot{width:7px;height:7px;border-radius:50%;background:var(--jade);box-shadow:0 0 8px var(--jade)}
  /* 作者原样填写的说明：保留换行，长串不撑破弹窗 */
  .nd-cms__note{margin:10px 0 0;padding:12px 13px;border-radius:10px;background:var(--fill-1);border:1px solid var(--line-2);
    font-size:13.5px;line-height:1.8;color:var(--ink);white-space:pre-line;overflow-wrap:anywhere}
  .nd-cms__note--empty{color:var(--ink-3)}
  .nd-cms__tip{display:flex;align-items:flex-start;gap:8px;margin-top:12px;font-size:12.5px;line-height:1.7;color:var(--ink-2)}
  .nd-cms__tip svg{flex-shrink:0;margin-top:2px;color:var(--mc)}
  .nd-cms__tip b{color:var(--mc)}
  .nd-cms__ok{display:block;width:100%;height:44px;margin-top:16px;border:0;border-radius:12px;cursor:pointer;
    font-size:14.5px;font-weight:800;color:#fff;background:var(--mc);transition:.15s}
  .nd-cms__ok:hover{filter:brightness(1.08)}
  /* 认领/约稿弹窗(复用 .cm-dialog 壳:PC 居中/H5 底部 sheet)；提交按钮走站点通用的
     创作类紫→蓝渐变(与 AI 工具页"制作"按钮同一色值)，与"给作品评分"红色按钮区分开 */
  .nc-claim__body{padding:2px 2px 4px}
  .nc-claim__desc{font-size:13px;line-height:1.7;color:var(--ink-2);margin-bottom:12px}
  .nc-claim__ta{width:100%;min-height:130px;resize:vertical;border:1px solid var(--line-2);border-radius:10px;
    background:var(--fill-1);color:var(--ink);font-family:inherit;font-size:13.5px;line-height:1.7;
    padding:11px 12px;outline:none;box-sizing:border-box;transition:.15s}
  .nc-claim__ta:focus{border-color:var(--mc)}
  .nc-claim__cnt{text-align:right;font-size:12px;color:var(--ink-3);margin-top:6px}
  .nc-claim__up{display:flex;align-items:center;gap:10px;margin-top:14px;flex-wrap:wrap}
  .nc-claim__upbtn{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--mc);cursor:pointer}
  .nc-claim__uphint{font-size:12px;color:var(--ink-3)}
  .nc-claim__prev{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
  .nc-claim__submit{display:block;width:100%;height:44px;margin-top:16px;border:0;border-radius:12px;cursor:pointer;
    font-size:14.5px;font-weight:800;color:#fff;letter-spacing:.01em;
    background:linear-gradient(90deg,#8533ED,#008EFE);box-shadow:0 10px 24px -12px #008EFE;transition:.15s}
  .nc-claim__submit:hover{filter:brightness(1.08)}
  .nc-claim__submit:disabled{opacity:.5;cursor:not-allowed;filter:none}
  /* 上次阅读位置行(可点击续读) */
  /* padding:0 / align-self:flex-start 是给 <button> 用的：ds/reset.css 只清了 border 和 background，
     UA 默认的 padding(约 1px 6px)还在，会把整行往右顶 6px，与上面的作者行、下面的按钮对不齐；
     列向 flex 里 align-self 默认 stretch，也会让这个按钮无谓地拉满整行宽。
     align-items:center 而非 baseline：行内混了 13px 正文、加粗章节名和 13px 的 SVG 箭头，
     按基线对齐时 SVG 会坐到基线上、看着往下掉半格。 */
  .nd-resume{display:flex;align-items:center;align-self:flex-start;padding:0;gap:6px;min-width:0;max-width:100%;white-space:nowrap;
    font-size:13px;color:rgba(255,255,255,.72);cursor:pointer}
  /* 章节名本身即可点击：正常白色文字 + 尾随续读图标标记可点(图标带绯红强调色，比下划线或红字更明确) */
  .nd-resume b{font-weight:700;color:rgba(255,255,255,.94);flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;transition:.15s}
  .nd-resume .nd-go,.nd-latest .nd-go{flex-shrink:0;display:inline-flex;color:#FF8095;opacity:.85;transition:.15s;margin-left:2px}
  .nd-resume:hover .nd-go,.nd-latest:hover .nd-go{color:#FFB3BE;opacity:1;transform:translateX(2px)}
  /* 最新章节行（可点击 → 阅读最新章节，PC/H5 一致） */
  /* max-width:100% 是 align-self:flex-start 的必配项：列向 flex 里改成 flex-start 后，
     这个按钮的宽度从"跟容器等宽"变成 max-content，整行 nowrap 的内容就会顶出信息栏。
     加上限后 .nd-latest b(min-width:0 + ellipsis)才有机会收缩截断。 */
  .nd-latest{display:flex;align-items:center;align-self:flex-start;padding:0;min-width:0;max-width:100%;white-space:nowrap;
    font-size:13px;color:rgba(255,255,255,.72);cursor:pointer}
  .nd-latest b{font-weight:700;color:rgba(255,255,255,.94);min-width:0;max-width:16em;overflow:hidden;text-overflow:ellipsis;margin-right:6px;transition:.15s}
  .nd-latest .tm{flex-shrink:0}
  /* —— 动作条：独立一栏(位于简介↔目录之间，不与数据栏拼接)；body 表面卡片，后续可继续增项 —— */
  /* 整条一张卡(单一背景)，按钮平铺其上、无独立底色，相邻间细分隔线作结构，仅 hover 浮出淡底 */
  .nd-actions{display:flex;flex-wrap:wrap;background:var(--surface);border:1px solid var(--line);overflow:hidden;
    border-radius:var(--r-card);box-shadow:var(--shadow-s);margin-bottom:clamp(18px,2.6vw,26px)}
  .nd-actb{flex:1 1 0;min-width:84px;display:flex;align-items:center;justify-content:center;gap:8px;padding:15px 10px;
    cursor:pointer;border:none;background:none;color:var(--ink-2);font-size:13px;font-weight:700;transition:.15s}
  .nd-actb svg{flex-shrink:0}
  .nd-actb+.nd-actb{box-shadow:-1px 0 0 var(--line)}
  .nd-actb:hover{color:var(--mc);background:var(--fill-1)}
  .nd-actb--warn:hover{color:#fff;background:color-mix(in srgb,var(--mc) 72%,transparent)}
  @media(max-width:560px){.nd-actb{min-width:0;flex-direction:column;gap:5px;padding:13px 4px;font-size:11.5px}}
  .nd-tag{display:inline-flex;align-items:center;height:30px;padding:0 13px;border-radius:var(--r-pill);
    font-size:12px;font-weight:700;letter-spacing:.02em;color:rgba(255,255,255,.9);
    background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2);backdrop-filter:blur(6px)}
  .nd-tag--done{background:rgba(230,184,115,.92);color:#1a1a22;border-color:transparent;box-shadow:0 0 18px -6px var(--gold)}
  .nd-tag--live{background:rgba(255,59,92,.9);color:#fff;border-color:transparent;box-shadow:0 0 18px -6px var(--crimson)}
  .nd-tag--meat{color:#FF8095;background:rgba(255,59,92,.13);border-color:rgba(255,59,92,.35)}
  /* 原创首发金标：移到书名前(行内金标，与列表卡 .cn-lcard__fr 同款)，PC/H5 一致；不再放徽章行 */
  .nd-fr-inline{display:inline-block;vertical-align:middle;margin-right:8px;padding:2px 6px;border-radius:5px;
    font-family:var(--font-sans);font-size:10px;font-weight:800;letter-spacing:.02em;line-height:1.5;text-shadow:none;
    background:linear-gradient(135deg,#F3D6A0,var(--gold));color:#3A2A0E;white-space:nowrap}
  @media(min-width:1000px){.nd-fr-inline{font-size:13px;padding:3px 10px;margin-right:12px;border-radius:6px}}

  /* CTA 两按钮等宽（开始阅读 = 收藏/已收藏）；margin-top:auto 推到文案块底部，与封面底对齐 */
  .nd-cta{display:flex;gap:12px;max-width:420px}
  .nd-cta .nd-cbtn{flex:1 1 0;min-width:0;padding:0 14px}
  /* —— 详情页 CTA 按钮（开始阅读 / 收藏·已收藏）—— */
  .nd-cbtn{display:inline-flex;align-items:center;justify-content:center;gap:9px;height:50px;padding:0 26px;border-radius:13px;cursor:pointer;
    font-family:var(--font-sans);font-size:15px;font-weight:800;letter-spacing:.02em;border:1px solid transparent;transition:.2s;white-space:nowrap}
  .nd-cbtn svg{width:18px;height:18px;flex-shrink:0}
  .nd-cbtn--go{color:#fff;background:#FF3B5C;background:linear-gradient(135deg,#ff6178,#ff2d52);box-shadow:inset 0 1px 0 rgba(255,255,255,.22)}
  .nd-cbtn--go:hover{transform:translateY(-2px);filter:brightness(1.06)}
  .nd-cbtn:focus-visible{outline:2px solid #fff;outline-offset:3px}
  /* 收藏（Hero 暗底=白玻璃；已收藏=绯红实心，心形由 JS 切实心） */
  .nd-cta .nd-cbtn--fav{color:#fff;background:rgba(255,255,255,.13);border-color:rgba(255,255,255,.42);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
  .nd-cta .nd-cbtn--fav:hover{background:rgba(255,255,255,.2);border-color:rgba(255,255,255,.7);transform:translateY(-2px)}
  .nd-cta .nd-cbtn--fav.is-on{background:rgba(255,59,92,.9);border-color:transparent}

  /* Hero 底部统计条（玻璃·4 宫格，压在 backdrop 上，分隔线走 --line） */
  .nd-stats{position:relative;z-index:2;margin-top:clamp(22px,3vw,34px);
    display:grid;grid-template-columns:repeat(4,1fr);gap:1px;overflow:hidden;
    border-radius:var(--r-card);background:var(--line);border:1px solid rgba(255,255,255,.1)}
  .nd-stat{background:rgba(12,12,16,.42);backdrop-filter:blur(12px);padding:16px 12px;text-align:center}
  :root[data-theme="light"] .nd-stat{background:rgba(20,16,12,.42)}
  /* nowrap：数值恒单行。四格是等宽栅格，某一格换行会把整条统计条撑高、四格数值与标签错位 */
  .nd-stat .n{font-family:var(--font-latin);font-weight:800;font-size:clamp(18px,2.4vw,26px);color:#fff;line-height:1;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .nd-stat .n.gold{color:var(--gold)}
  .nd-stat .l{margin-top:7px;font-size:11.5px;color:rgba(255,255,255,.62);letter-spacing:.06em}

  /* —— 主体两栏 —— */
  .nd-cols{max-width:var(--maxw);margin:0 auto;padding:clamp(12px,2vw,22px) clamp(16px,5vw,72px) 40px;
    display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(20px,3vw,34px)}
  @media(min-width:1000px){.nd-cols{grid-template-columns:minmax(0,1fr) 320px}}

  .nd-block{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);
    padding:clamp(18px,2.6vw,28px);box-shadow:var(--shadow-s);margin-bottom:clamp(18px,2.6vw,26px)}
  .nd-side .nd-block{margin-bottom:0}
  .nd-block__t{font-family:var(--font-serif);font-weight:900;font-size:clamp(18px,2.2vw,23px);color:var(--title);
    margin-bottom:16px;display:flex;align-items:center;gap:11px}
  .nd-block__t::before{content:"";width:4px;height:18px;border-radius:3px;background:var(--mc);box-shadow:0 0 12px -2px var(--mc)}

  /* 简介恒完整显示，不折叠、不「展开全部」——四个详情页统一。
     保留数据里的换行：简介在后台是多段文本，直接输出到 HTML 里换行会被折叠成空格，整段挤成一坨。pre-line 只保留换行、连续空格仍折叠，正好适合正文。 */
  .nd-synopsis{font-size:14.5px;line-height:1.92;color:var(--ink-2);white-space:pre-line}
  .nd-tagline{margin-top:18px;display:flex;flex-wrap:wrap;align-items:center;gap:9px}
  /* 作者说：独立成块、仅文本内容(已去掉选项卡与头像/分节/落款装饰) */
  .nd-asay p{font-size:14.5px;line-height:1.92;color:var(--ink-2)}
  .nd-asay p+p{margin-top:13px}
  .nd-pill{display:inline-flex;align-items:center;padding:6px 14px;border-radius:var(--r-pill);font-size:12.5px;font-weight:600;letter-spacing:.02em;
    background:var(--fill-1);color:var(--ink-2);border:1px solid var(--line);transition:.18s;text-decoration:none}
  .nd-pill:hover{border-color:color-mix(in srgb,var(--mc) 45%,transparent);color:var(--mc)}
  .nd-pill em{margin-left:6px;font-style:normal;font-family:var(--font-latin);font-weight:700;font-size:11px;color:var(--ink-3);opacity:.85}
  /* 加/减标签按钮(参考原站标签投票)。
     用中性色而不是主题红：这两个按钮跟在 .nd-pill 标签串后面，染成红色会比标签本身还抢眼，
     像是页面的主行动按钮——它们只是次要操作。加/减同色，成对出现时才不会一重一轻。 */
  .nd-tagbtn{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border-radius:var(--r-pill);font-size:12px;font-weight:700;cursor:pointer;
    color:var(--ink-3);background:var(--fill-1);border:1px solid var(--line);transition:.15s}
  .nd-tagbtn:hover{color:var(--ink-2);background:var(--fill-2);border-color:var(--line-2)}
  .nd-tagbtn svg{width:14px;height:14px}
  /* --sub(减标签)与基础样式已经一致，类名保留给模板/JS 当钩子用，无需再覆写 */
  /* 标签编辑弹窗(复用 .cm-dialog 壳:PC 居中/H5 底部 sheet) */
  .tv-panel{display:flex;flex-direction:column;overflow:hidden}
  .tv-body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}
  .tv-search{display:flex;align-items:center;gap:9px;height:40px;padding:0 13px;border-radius:11px;background:var(--fill-1);border:1px solid var(--line);color:var(--ink-3);margin-bottom:10px}
  .tv-search:focus-within{border-color:color-mix(in srgb,var(--mc) 50%,transparent)}
  .tv-search input{flex:1;min-width:0;border:none;outline:none;background:none;font-size:13.5px;color:var(--ink);font-family:var(--font-sans)}
  .tv-search input::-webkit-search-cancel-button{display:none}
  .tv-hint{font-size:12px;color:var(--ink-3);margin-bottom:12px}
  .tv-grp{margin-bottom:14px}
  .tv-grp[hidden]{display:none}
  .tv-grp h5{font-size:11px;font-weight:800;letter-spacing:.08em;color:var(--ink-3);margin:0 0 8px}
  .tv-chips{display:flex;flex-wrap:wrap;gap:8px}
  .tv-chip{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;border-radius:var(--r-pill);font-size:12.5px;font-weight:600;cursor:pointer;
    color:var(--ink-2);background:var(--fill-1);border:1px solid var(--line);transition:.13s}
  .tv-chip[hidden]{display:none}
  .tv-chip:hover{border-color:var(--line-2);color:var(--ink)}
  .tv-chip i{font-style:normal;font-size:10.5px;font-weight:700;font-family:var(--font-latin);color:var(--ink-3);opacity:.8}
  .tv-chip.has{border-color:color-mix(in srgb,var(--mc) 30%,transparent)}
  .tv-chip.sel{color:#fff;background:var(--mc);border-color:transparent}
  .tv-chip.sel i{color:rgba(255,255,255,.85)}
  .tv-empty{font-size:13px;color:var(--ink-3)}
  .tv-foot{display:flex;align-items:center;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
  .tv-tip{flex:1;min-width:0;font-size:12px;color:var(--ink-3)}
  .tv-cancel{height:38px;padding:0 16px;border-radius:11px;font-weight:700;cursor:pointer;color:var(--ink-2);background:var(--fill-1);border:1px solid var(--line)}
  .tv-cancel:hover{border-color:var(--line-2);color:var(--ink)}
  .tv-apply{height:38px;padding:0 22px;border-radius:11px;font-weight:800;cursor:pointer;color:#fff;background:var(--mc);border:none}
  .tv-apply:disabled{opacity:.45;cursor:default}

  /* —— 章节 —— */
  .nd-chaphead{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:16px}
  .nd-chaphead .nd-block__t{margin:0}
  .nd-chaphead .total{font-size:12px;color:var(--ink-3);font-family:var(--font-latin);letter-spacing:.04em;flex-shrink:0}
  .nd-chaplist{display:flex;flex-direction:column;gap:2px;margin-bottom:18px}
  .nd-chap{display:flex;align-items:center;gap:14px;padding:13px 14px;border-radius:11px;cursor:pointer;transition:.16s;
    border:1px solid transparent}
  .nd-chap:hover{background:var(--fill-hover);border-color:var(--line)}
  .nd-chap__no{font-family:var(--font-latin);font-weight:700;font-size:13px;color:var(--ink-3);flex-shrink:0;min-width:64px}
  .nd-chap__name{flex:1;font-size:14.5px;color:var(--ink);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .nd-chap__time{font-size:12px;color:var(--ink-3);flex-shrink:0;font-family:var(--font-latin)}
  .nd-chap--new .nd-chap__name::after{content:"NEW";margin-left:9px;font-family:var(--font-latin);font-size:9.5px;font-weight:800;
    letter-spacing:.06em;color:var(--mc);border:1px solid color-mix(in srgb,var(--mc) 50%,transparent);
    padding:1px 5px;border-radius:5px;vertical-align:middle}
  .nd-chap:hover .nd-chap__no{color:var(--mc)}

  .nd-catalog{display:grid;grid-template-columns:1fr;gap:9px}
  @media(min-width:560px){.nd-catalog{grid-template-columns:1fr 1fr}}
  .nd-vol{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;border-radius:12px;
    background:var(--fill-1);border:1px solid var(--line);cursor:pointer;transition:.18s}
  .nd-vol:hover{border-color:color-mix(in srgb,var(--mc) 45%,transparent);background:var(--fill-2)}
  .nd-vol b{font-family:var(--font-serif);font-weight:700;font-size:14px;color:var(--ink)}
  .nd-vol span{font-size:12px;color:var(--ink-3);font-family:var(--font-latin);flex-shrink:0}

  /* —— 章节目录（分卷+序言折叠 · 权限标 · 正倒序）—— */
  .ndc-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}
  .ndc-head .nd-block__t{margin:0}
  .ndc-count{font-size:12.5px;color:var(--ink-3);font-family:var(--font-latin)}
  .ndc-sort{margin-left:auto;display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 13px;border-radius:9px;cursor:pointer;
    font-size:12.5px;font-weight:700;color:var(--ink-2);background:var(--fill-1);border:1px solid var(--line);transition:.15s}
  .ndc-sort:hover{border-color:var(--line-2);color:var(--ink)}
  .ndc-list{display:flex;flex-direction:column;gap:1px}
  .ndc-row{display:flex;align-items:center;gap:12px;padding:11px 12px;border-radius:10px;cursor:pointer;transition:.15s;border:1px solid transparent}
  .ndc-row:hover{background:var(--fill-hover);border-color:var(--line)}
  .ndc-no{font-family:var(--font-latin);font-weight:700;font-size:12.5px;color:var(--ink-3);flex:0 0 54px;line-height:20px}
  /* 名字最多 2 行再省略，长章节名也不丢太多信息；首行与序号/标/时间对齐 */
  .ndc-name{flex:1;min-width:0;font-size:14px;color:var(--ink);font-weight:600;line-height:1.43;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ndc-row:hover .ndc-name{color:var(--mc)}
  .ndc-time{flex-shrink:0;font-size:12px;color:var(--ink-3);font-family:var(--font-latin);min-width:54px;text-align:right;line-height:20px}
  .ndc-acc{line-height:18px}
  .ndc-row--new .ndc-name::after{content:"NEW";margin-left:8px;font-family:var(--font-latin);font-size:9px;font-weight:800;color:var(--mc);
    border:1px solid color-mix(in srgb,var(--mc) 50%,transparent);padding:1px 4px;border-radius:4px;vertical-align:middle}
  .ndc-row--pre{background:linear-gradient(90deg,color-mix(in srgb,var(--mc) 7%,transparent),transparent)}
  .ndc-pre{flex:0 0 54px}
  .ndc-pre b{font-family:var(--font-serif);font-weight:800;font-size:12px;color:#fff;background:var(--mc);padding:2px 8px;border-radius:6px}
  .ndc-row--pre .ndc-name{font-family:var(--font-serif);font-weight:800}
  /* 权限/价格标统一低调：全部去填充胶囊与边框，仅留极淡小字，避免“处处收费”的警觉感 */
  .ndc-acc{flex-shrink:0;font-size:11px;font-weight:500;white-space:nowrap;padding:0;border:none;background:none;opacity:.62}
  .ndc-vol{border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:10px}
  /* text-align:left 必须显式写：服务端渲染时卷头是 <button>，浏览器默认 text-align:center 会把卷名居中 */
  .ndc-vol__h{display:flex;width:100%;align-items:center;gap:12px;padding:13px 14px;cursor:pointer;user-select:none;transition:.15s;text-align:left}
  .ndc-vol__h:hover{background:var(--fill-1)}
  .ndc-vol__bar{width:4px;height:18px;border-radius:3px;background:var(--mc);box-shadow:0 0 10px -2px var(--mc);flex-shrink:0}
  .ndc-vol__main{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px}
  /* 卷名与章节名同规格：最多 2 行再省略，避免超长卷名把整块目录撑得过高 */
  .ndc-vol__t{flex:1 1 260px;min-width:0;font-family:var(--font-serif);font-weight:800;font-size:15px;color:var(--title);line-height:1.4;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
  .ndc-vol__n{font-size:12px;color:var(--ink-3);font-family:var(--font-latin);white-space:nowrap}
  .ndc-vol__cv{color:var(--ink-3);transition:transform .25s;flex-shrink:0;display:inline-flex}
  .ndc-vol.open .ndc-vol__cv{transform:rotate(180deg)}
  .ndc-vol__body{display:none;padding:2px 6px 8px}
  .ndc-vol.open .ndc-vol__body{display:block}
  .ndc-vol.open .ndc-vol__h{border-bottom:1px solid var(--line)}
  /* 卷内章节折叠：默认只露前 10 章，点「展开剩余 N 章」后整卷铺开(加 .is-expanded)。
     用 display:none 而不是不渲染——章节 <a> 全在 DOM 里，爬虫可收录、页内搜索也找得到。 */
  .ndc-vol .ndc-row--fold{display:none}
  .ndc-vol.is-expanded .ndc-row--fold{display:flex}
  .ndc-vol.is-expanded .ndc-more{display:none}
  /* 无分卷作品：章节行直接挂在 #ndcBody 下，折叠同上。用 > 限定直接子元素，
     免得把卷内的行也算进来（混排时 #ndcBody 底下既有散章又有 .ndc-vol）。 */
  #ndcBody > .ndc-row--fold{display:none}
  #ndcBody.is-expanded > .ndc-row--fold{display:flex}
  #ndcBody.is-expanded > .ndc-more{display:none}
  .ndc-more{display:flex;align-items:center;justify-content:center;gap:5px;width:100%;margin-top:6px;
    height:36px;border-radius:10px;cursor:pointer;font-size:13px;font-weight:700;letter-spacing:.02em;
    color:var(--mc);background:color-mix(in srgb,var(--mc) 8%,transparent);
    border:1px solid color-mix(in srgb,var(--mc) 26%,transparent);transition:.15s}
  .ndc-more:hover{background:color-mix(in srgb,var(--mc) 15%,transparent);border-color:color-mix(in srgb,var(--mc) 45%,transparent)}
  .ndc-more svg{flex-shrink:0}
  /* 章节目录工具条（跳章 / 全部展开收起）—— 随内容滚动,不再吸顶(PC/H5 一致) */
  .ndc-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px;padding:8px 10px;border-radius:10px;
    background:color-mix(in srgb,var(--surface) 92%,transparent);-webkit-backdrop-filter:saturate(150%) blur(8px);backdrop-filter:saturate(150%) blur(8px);border:1px solid var(--line)}
  .ndc-bar__jump{display:flex;align-items:center;gap:6px}
  .ndc-bar__jump input{width:130px;height:34px;border-radius:9px;background:var(--fill-1);border:1px solid var(--line);color:var(--ink);font-family:var(--font-sans);font-size:13px;padding:0 12px;outline:none}
  .ndc-bar__jump input:focus{border-color:var(--mc)}
  .ndc-bar__go{height:34px;padding:0 16px;border-radius:9px;font-size:13px;font-weight:800;color:#fff;background:var(--mc);cursor:pointer;flex-shrink:0}
  /* 全部展开/收起 合并为一个可切换的图标按钮(靠右);回顶按钮已去除——精简跳转行 */
  .ndc-bar__fold{display:inline-flex;align-items:center;justify-content:center;width:36px;height:34px;margin-left:auto;flex-shrink:0;
    border-radius:9px;border:1px solid var(--line);background:var(--fill-1);color:var(--ink-2);cursor:pointer;transition:.15s}
  .ndc-bar__fold:hover{border-color:var(--mc);color:var(--mc)}
  /* 卷内页码条（flex-wrap 折行，绝不横向滚） */
  .ndc-pg{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px;padding:14px 6px 6px;margin-top:6px;border-top:1px solid var(--line)}
  .ndc-pg__chip,.ndc-pg__btn{min-width:34px;height:34px;padding:0 11px;display:inline-flex;align-items:center;justify-content:center;
    font:700 12.5px/1 var(--font-latin);color:var(--ink-2);background:var(--fill-1);border:1px solid var(--line);border-radius:9px;cursor:pointer;transition:.15s}
  .ndc-pg__chip:hover,.ndc-pg__btn:hover{border-color:var(--line-2);color:var(--ink)}
  .ndc-pg__chip--cur{color:#fff;background:var(--mc);border-color:var(--mc);box-shadow:0 0 10px -3px var(--mc)}
  .ndc-pg__btn--dis{opacity:.38;pointer-events:none}
  .ndc-pg__gap{color:var(--ink-3);padding:0 2px}
  .ndc-pg__cur{display:none;align-items:center;font:700 12.5px var(--font-latin);color:var(--ink-2);padding:0 8px}
  /* —— 快捷定位条的「滑动」版（真实模式用，加 .ndc-pg--scroll）——
     档位全列出来放在一条横向滚动带里，左右箭头只负责滚动这条带子，放得下时箭头自动隐藏。
     不带这个修饰类的(静态原型的分页条)仍是原来的居中换行 + 省略号版式，互不影响。 */
  .ndc-pg--scroll{flex-wrap:nowrap;justify-content:flex-start;gap:8px}
  .ndc-pg__scroller{flex:1;min-width:0;display:flex;align-items:center;gap:6px;
    overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none}
  .ndc-pg__scroller::-webkit-scrollbar{display:none}
  .ndc-pg--scroll .ndc-pg__chip{flex:0 0 auto}
  .ndc-pg--scroll .ndc-pg__btn{flex:0 0 auto}
  .ndc-pg--scroll .ndc-pg__btn[hidden]{display:none}
  /* 跳章命中高亮：背景淡入渐隐、无位移（移动端不抖） */
  @keyframes ndcHit{0%,55%{background:color-mix(in srgb,var(--mc) 16%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--mc) 42%,transparent)}100%{background:transparent;box-shadow:inset 0 0 0 1px transparent}}
  .ndc-row--hit{animation:ndcHit 1.4s ease}
  @media(max-width:480px){
    .ndc-pg__chip,.ndc-pg__gap{display:none}
    .ndc-pg__cur{display:inline-flex}
    /* 滑动版例外：窄屏本来就能横滑，档位继续显示，不用退化成一行文字 */
    .ndc-pg--scroll .ndc-pg__chip{display:inline-flex}
    /* 窄屏放不下 260px 的基准宽，会把「N 章」挤到第二行；改为按内容伸缩，短卷名与章数同行 */
    .ndc-vol__t{flex:1 1 auto}
  }

  /* —— 评论 —— */
  .nd-review{padding:18px 0;border-top:1px solid var(--line)}
  .nd-review:first-of-type{padding-top:0;border-top:none}
  .nd-review__head{display:flex;align-items:center;gap:12px;margin-bottom:11px}
  .nd-review__av{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;
    font-family:var(--font-serif);font-weight:800;font-size:16px;color:#fff;box-shadow:var(--shadow-s)}
  .nd-review__who{min-width:0;flex:1}
  .nd-review__who b{display:block;font-size:14px;font-weight:700;color:var(--ink)}
  .nd-review__who .m{font-size:11.5px;color:var(--ink-3);margin-top:2px}
  .nd-review__stars{flex-shrink:0;font-family:var(--font-latin);font-weight:900;font-size:18px;color:var(--gold);
    display:flex;align-items:center;gap:5px}
  .nd-review__stars::before{content:"★";font-size:15px}
  .nd-review__body{font-size:14px;line-height:1.8;color:var(--ink-2)}

  /* —— 打赏榜 —— */
  .nd-gfhead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
  .nd-gfhead .nd-block__t{margin:0}
  .nd-gf-note{font-size:12px;color:var(--ink-3);font-weight:400;white-space:nowrap}
  .nd-gfbtn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 16px;border-radius:var(--r-pill);flex-shrink:0;
    font-size:13px;font-weight:800;color:#241a08;background:linear-gradient(135deg,#f3d6a0,var(--gold));cursor:pointer;transition:.18s}
  .nd-gfbtn:hover{filter:brightness(1.06);transform:translateY(-1px)}
  .nd-gflist{display:flex;flex-direction:column;gap:2px}
  .nd-gfempty{padding:26px 10px;text-align:center;font-size:13px;color:var(--ink-3)}   /* 后台 rewards 为空 */
  .nd-gf{display:flex;align-items:flex-start;gap:11px;padding:11px 10px;border-radius:12px;transition:.15s}
  .nd-gf:hover{background:var(--fill-1)}
  .nd-gf__rk{flex:0 0 18px;align-self:center;font-family:var(--font-latin);font-weight:900;font-size:15px;color:var(--ink-3);text-align:center}
  .nd-gf--top .nd-gf__rk{color:var(--gold)}
  .nd-gf__in{flex:1;min-width:0}
  .nd-gf__h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;row-gap:4px}
  /* 昵称长度用户自己说了算：flex 子项默认 min-width:auto 不肯收缩，再叠 white-space:nowrap 就会
     直接顶出 .nd-block 的右边框（长昵称实测溢出）。改成允许折行，超长(含无空格的连续字符)最多 2 行省略。 */
  .nd-gf__h b{font-size:14px;font-weight:700;color:var(--ink);min-width:0;overflow-wrap:anywhere;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .nd-gf__h .vip{align-self:center}
  .nd-gf__coin{margin-left:auto;flex-shrink:0;font-family:var(--font-latin);font-weight:800;font-size:14px;color:var(--gold)}
  /* 打赏的礼物名(玫瑰/香槟/火箭…)，跟在金额前面 */
  .nd-gf__gift{font-family:inherit;font-weight:700;font-size:13px;color:var(--ink-2)}
  .nd-gf__gift::after{content:"·";margin:0 5px;font-weight:400;color:var(--ink-3)}
  .nd-gf__msg{margin-top:3px;font-size:12.5px;color:var(--ink-3);line-height:1.6;word-break:break-word}

  /* —— 评论：头像 / 主条 —— */
  .cm-av{position:relative;overflow:hidden;width:40px;height:40px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;font-family:var(--font-serif);font-weight:800;font-size:15px;color:#fff;cursor:pointer}
  .cm-av--demo{background:linear-gradient(140deg,rgba(255,255,255,.45),#FF6177)}
  .cm-av img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
  .cm-n{font-family:var(--font-latin);font-weight:800;font-size:13px;color:var(--mc);margin-left:6px}
  /* 评论排序：最新 / 最热 —— 靠右,与"全部评论"标题同一行 */
  .cm-sortbar{margin-left:auto;display:flex;gap:8px;flex-shrink:0}
  .cm-sortb{font-family:var(--font-sans);padding:5px 13px;border-radius:var(--r-pill);font-size:12.5px;font-weight:700;cursor:pointer;
    color:var(--ink-3);background:var(--fill-1);border:1px solid var(--line);transition:.15s}
  .cm-sortb:hover{color:var(--ink);border-color:var(--line-2)}
  .cm-sortb.is-on{color:#fff;background:var(--mc);border-color:transparent}
  @media(max-width:480px){.cm-sortb{padding:5px 11px;font-size:12px}}
  .cm-list{display:flex;flex-direction:column}
  .cm{display:flex;gap:12px;padding:18px 0;border-top:1px solid var(--line)}
  .cm:first-child{border-top:none;padding-top:6px}
  .cm__in{flex:1;min-width:0}
  .cm__h{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
  .cm__h b{font-size:14px;font-weight:700;color:var(--ink)}
  /* —— VIP 徽章 · J 全息典藏（定稿）：订阅档=缓慢流动的虹彩金属,至尊=黑金匣+金粉箔光,纯VIP=绯红兜底 ——
     月/年卡按色相+明度双维拉开：月卡紫铜(红棕偏深) / 年卡鎏金(明黄偏亮);
     动效方向：背板按整周期(200%/300%)由高位推到 0,纹理沿阅读方向前行且循环无缝
     (background-size>100% 时百分比映射系数为负,数值增大纹理反而左移,故反向取值) */
  .vip{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:4px;height:18px;padding:0 8px;border-radius:7px;flex-shrink:0;
    font-size:10px;font-weight:800;line-height:1;letter-spacing:.3px;white-space:nowrap;color:#fff}
  .vip svg{flex-shrink:0;display:block;width:11px;height:11px}
  .vip0,.vip1,.vip2,.vip3{background:linear-gradient(110deg,var(--m1),var(--m2),var(--m1));background-size:200% 100%;animation:vipFlow 7s linear infinite}
  .vip0{--m1:#FF5E78;--m2:#E02649}
  .vip1{--m1:#D69468;--m2:#9C5F2B;color:#33190A}
  .vip2{--m1:#EDF2F8;--m2:#9FAEBE;color:#222B34}
  .vip3{--m1:#FFE39B;--m2:#DCA52F;color:#3D2B04}
  .vip4{background:linear-gradient(150deg,#2A1D33,#0E0A13 70%);color:#F4D79B;
    box-shadow:inset 0 0 0 1px rgba(244,215,155,.5),0 3px 16px -5px rgba(244,215,155,.4)}
  .vip4 svg{color:#FFD36B}
  .vip4::after{content:"";position:absolute;inset:0;pointer-events:none;mix-blend-mode:screen;
    background:linear-gradient(115deg,transparent 18%,rgba(255,210,150,.5) 34%,rgba(255,140,200,.34) 50%,rgba(150,200,255,.42) 66%,transparent 82%);
    background-size:300% 100%;animation:vipFoil 5.5s linear infinite}
  @keyframes vipFlow{from{background-position:200% 0}to{background-position:0% 0}}
  @keyframes vipFoil{from{background-position:150% 0}to{background-position:0% 0}}
  [data-theme="light"] :is(.vip0,.vip1,.vip2,.vip3){box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
  @media (prefers-reduced-motion:reduce){.vip0,.vip1,.vip2,.vip3,.vip4::after{animation:none}.vip4::after{opacity:.55}}
  .cm-stars{color:var(--gold);font-size:12.5px;letter-spacing:1px;line-height:1}
  .cm-stars i{font-style:normal}
  .cm-stars i.off{color:var(--line-2)}
  /* 星星前面的评分数值。letter-spacing 要归零——.cm-stars 那 1px 是给星星之间留缝的，数字跟着撑会散 */
  .cm-stars b{margin-right:5px;font-family:var(--font-latin);font-weight:800;font-size:12.5px;letter-spacing:0}
  .cm-time{font-size:11.5px;color:var(--ink-3)}
  .cm-time--r{margin-left:auto}
  .cm__b{margin-top:7px;font-size:14px;line-height:1.75;color:var(--ink-2);word-break:break-word}
  .cm__img{margin-top:9px}
  .cm__img img{max-width:200px;max-height:200px;border-radius:10px;border:1px solid var(--line);display:block}
  .cm-acts{display:flex;align-items:center;gap:18px;margin-top:9px}
  .cm-act{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--ink-3);cursor:pointer;transition:.15s}
  .cm-act:hover{color:var(--ink)}
  .cm-act.on{color:var(--mc)}
  .cm-act svg{width:15px;height:15px}

  /* —— 评论：回复区（折叠/展开） —— */
  .cm-reps{margin-top:12px;padding:4px 12px;border-radius:12px;background:var(--fill-1)}
  .cm-rep{display:flex;gap:10px;padding:10px 0}
  .cm-rep+.cm-rep{border-top:1px solid var(--line)}
  .cm-rep .cm-av{width:30px;height:30px;font-size:12px}
  .cm-rep__in{flex:1;min-width:0}
  .cm-rep__h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .cm-rep__h b{font-size:13px;font-weight:700;color:var(--ink)}
  .cm-author{color:var(--mc)}
  .cm-tag{font-size:10px;font-weight:800;color:#fff;background:var(--mc);padding:1px 6px;border-radius:5px}
  .cm-rep__b{margin-top:4px;font-size:13.5px;line-height:1.65;color:var(--ink-2);word-break:break-word}
  .cm-rep .cm-acts{gap:16px;margin-top:6px}
  .cm-more{display:inline-flex;align-items:center;gap:4px;margin:8px 0 4px;padding:6px 10px;border-radius:999px;
    font-size:12.5px;font-weight:800;color:var(--ink);background:var(--fill-2);border:1px solid var(--line);cursor:pointer}
  .cm-more:hover{border-color:var(--line-2);background:var(--fill-1)}
  .cm-more svg{width:13px;height:13px}
  /* 后台评论：空态 + 翻页「加载更多」(居中一行,复用 cm-more 皮肤) */
  .cm-empty{padding:26px 10px;text-align:center;font-size:13px;color:var(--ink-3)}
  .cm-loadmore{margin-top:6px;text-align:center}

  /* —— 评论：底部提示行 + 评分发布按钮（参考原站,列表在上输入在下） —— */
  .cm-notice{margin-top:12px;text-align:center;font-size:12px;color:var(--ink-3)}
  .cm-dmca{margin:18px 0 4px;text-align:center;font-size:12px;line-height:1.9;color:var(--ink-3)}
  .cm-dmca span{color:var(--gold);font-weight:600}
  .cm-launch{margin:12px 0 4px}
  .cm-launch__btn{display:block;width:100%;height:42px;border-radius:12px;font-size:13.5px;font-weight:800;cursor:pointer;
    color:#fff;background:var(--mc);box-shadow:0 0 18px -6px var(--mc);transition:.15s}   /* 通栏全宽,同原站 */
  .cm-launch__btn:hover{filter:brightness(1.08)}
  /* 评分弹窗：PC 居中 / H5 底部 sheet */
  .cm-dialog{position:fixed;inset:0;z-index:1200;display:none}
  .cm-dialog.open{display:block}
  .cm-dialog__veil{position:absolute;inset:0;background:rgba(8,8,12,.55);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
  .cm-dialog__panel{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(560px,92vw);max-height:84vh;overflow:auto;
    background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:16px 18px;
    box-shadow:0 40px 100px -30px rgba(0,0,0,.8);animation:cmDlgIn .2s ease both}
  .cm-dialog__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
  .cm-dialog__head b{font-family:var(--font-serif);font-size:16px;color:var(--title)}
  .cm-dialog__x{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;color:var(--ink-3);background:var(--fill-1);border:1px solid var(--line);cursor:pointer;transition:.15s}
  .cm-dialog__x:hover{color:var(--ink);border-color:var(--line-2)}
  @keyframes cmDlgIn{from{opacity:0;transform:translate(-50%,calc(-50% + 10px))}to{opacity:1;transform:translate(-50%,-50%)}}
  @media(max-width:760px){
    .cm-dialog__panel{left:0;right:0;top:auto;bottom:0;transform:none;width:auto;max-height:86vh;
      border-radius:18px 18px 0 0;border-left:none;border-right:none;border-bottom:none;
      padding:16px 16px calc(16px + env(safe-area-inset-bottom));animation:cmSheetIn .26s cubic-bezier(.2,.7,.2,1)}
  }
  @keyframes cmSheetIn{from{transform:translateY(100%)}to{transform:none}}
  @media (prefers-reduced-motion:reduce){.cm-dialog__panel{animation:none}}
  /* —— 通用确认弹窗(复用 .cm-dialog 外壳，替代系统 confirm) —— */
  .cm-dialog__panel--sm{width:min(380px,92vw)}
  .cm-cfm__msg{margin:2px 0 16px;font-size:13.5px;line-height:1.8;color:var(--ink-2)}
  .cm-cfm__acts{display:flex;gap:10px}
  .cm-cfm__btn{flex:1;height:40px;border-radius:12px;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit;transition:.15s;
    color:var(--ink);background:var(--fill-1);border:1px solid var(--line)}
  .cm-cfm__btn:hover{border-color:var(--line-2);background:var(--fill-2)}
  .cm-cfm__btn--danger{color:#fff;border-color:transparent;background:linear-gradient(135deg,var(--crimson),#c52742)}
  .cm-cfm__btn--danger:hover{filter:brightness(1.07)}
  /* —— 评论：输入框（评分/表情/图片/发布） —— */
  .cm-cmp{margin:0 0 4px;padding:12px;border-radius:14px;background:var(--fill-1);border:1px solid var(--line)}
  .cm-cmpwrap .cm-cmp{margin-top:10px;background:var(--surface)}
  /* 评分弹窗主角区：大号星标居中 + 随分数评语 */
  .cm-ratebig{text-align:center;padding:4px 0 14px}
  .cm-ratebig__stars{display:flex;justify-content:center;gap:10px;touch-action:none}
  .cm-ratebig__stars i{font-style:normal;font-size:34px;line-height:1;color:var(--line-2);cursor:pointer;
    transition:transform .12s,color .12s;text-shadow:none}
  .cm-ratebig__stars i:hover{transform:scale(1.15)}
  .cm-ratebig__stars i.on{color:var(--gold);text-shadow:0 0 16px color-mix(in srgb,var(--gold) 55%,transparent)}
  .cm-ratebig__cap{margin-top:9px;min-height:18px;font-size:13px;font-weight:700;color:var(--gold)}
  .cm-cmp__to{font-size:12.5px;color:var(--ink-2);margin-bottom:8px}
  .cm-cmp__x{margin-left:8px;font-size:12px;color:var(--ink-3);cursor:pointer}
  .cm-cmp__ta{width:100%;min-height:56px;resize:vertical;border:none;background:none;color:var(--ink);font-family:inherit;font-size:14px;line-height:1.7;outline:none}
  .cm-cmp__prev{display:flex;gap:8px;flex-wrap:wrap}
  .cm-thumb{position:relative;width:72px;height:72px;border-radius:8px;overflow:hidden;border:1px solid var(--line)}
  .cm-thumb img{width:100%;height:100%;object-fit:cover}
  .cm-thumb button{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:12px;line-height:1;cursor:pointer;display:grid;place-items:center}
  /* 配图上传中：本地预览压暗并盖一层进度字样，传完换成后台地址并露出删除按钮 */
  .cm-thumb.is-busy img{opacity:.45}
  .cm-thumb__up{position:absolute;inset:0;display:grid;place-items:center;font-size:11px;font-style:normal;font-weight:700;color:#fff;background:rgba(0,0,0,.35)}
  .cm-cmp__bar{display:flex;align-items:center;gap:10px;margin-top:8px;border-top:1px solid var(--line);padding-top:9px}
  .cm-cmp__emo{display:flex;gap:2px;flex-wrap:wrap;flex:1;min-width:0}
  .cm-cmp__emo button{font-size:18px;line-height:1;padding:2px 3px;cursor:pointer;border-radius:6px}
  .cm-cmp__emo button:hover{background:var(--fill-2)}
  .cm-cmp__att{display:inline-flex;align-items:center;cursor:pointer;color:var(--ink-3);flex-shrink:0;transition:.15s}
  .cm-cmp__att:hover{color:var(--mc)}
  .cm-cmp__send{flex-shrink:0;height:34px;padding:0 20px;border-radius:9px;font-size:13px;font-weight:800;color:#fff;background:linear-gradient(135deg,#ff6178,#ff2d52);cursor:pointer}
  .cm-cmp__send:hover{filter:brightness(1.06)}

  /* —— 相关推荐：PC 用 cine 海报小卡(2列) .nd-recgrid；H5 用 .cn-lcard 列表 .nd-reclist（复用 list/rank 页组件） —— */
  .nd-recgrid{display:none}
  .nd-reclist{display:flex;flex-direction:column;gap:14px}
  @media(min-width:1000px){.nd-recgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(14px,1.5vw,20px)}.nd-recgrid .cn-poster{width:100%;min-width:0}.nd-reclist{display:none}}
  .nd-side{position:sticky;top:74px}
  /* H5：每张 .cn-lcard 已自带卡片背景，外层「读了又读」再套一层 .nd-block 边框显得多余——去掉外框,标题单独展示 */
  @media(max-width:999px){.nd-side .nd-block--bare{background:none;border:0;box-shadow:none;padding:0}}

  @media(min-width:1000px){.nd-page{padding-bottom:0}}
  @media(max-width:999px){
    .nd-hero{padding-top:calc(var(--top-h, 58px) + 12px)}
    .nd-hero__top{position:relative;top:auto;left:auto;width:auto;max-width:var(--maxw);
      margin:0 auto 12px;transform:none;pointer-events:auto}
    .nd-back{width:40px;height:40px}
    .nd-hero__in{gap:clamp(12px,3vw,24px)}
    .nd-cover{width:clamp(116px,34vw,150px)}
    .nd-info{justify-content:space-between;gap:6px}
    .nd-author{gap:7px;font-size:12.5px}
    .nd-claim,.nd-author__cms{height:22px;padding:0 9px;font-size:11px}
    .nd-latest,.nd-resume{gap:4px;font-size:12.5px}
    .nd-latest b,.nd-resume b{max-width:10em}
    .nd-cta{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;max-width:none;width:100%}
    .nd-cta .nd-cbtn{height:36px;padding:0 8px;border-radius:10px;font-size:12px;gap:5px}
    .nd-cta .nd-cbtn svg{width:15px;height:15px}
  }

  /* —— 键盘可达：聚焦描边（noir 暗红，与频道色一致）—— */
  .nd-back:focus-visible,.nd-cols a:focus-visible{
    outline:2px solid var(--mc);outline-offset:3px;border-radius:12px}

  @media (prefers-reduced-motion:reduce){
    .nd-hero__bg img{transform:scale(1.06)!important}
  }

/* 评分/评论提交按钮 — 提交中锁定并显示转圈图标 */
.cm-cmp__send.is-sending{opacity:.72;cursor:default;filter:none;pointer-events:none}
.cm-cmp__send{min-width:62px}
.cm-cmp__send .cm-cmp__spin{display:inline-block;width:15px;height:15px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:cm-send-spin .6s linear infinite;vertical-align:-3px}
@keyframes cm-send-spin{to{transform:rotate(360deg)}}
