/* 起点式章页阅读器：纸栏 + 侧栏 + 设置 */
body.qy-novel-reading,
body.qy-novel-reading .qy-e-main,
body.qy-novel-reading .ydw-article-page {
    background: #cfc9bb !important;
}
body.qy-novel-reading[data-qy-read-theme="mist"],
body.qy-novel-reading[data-qy-read-theme="mist"] .qy-e-main,
body.qy-novel-reading[data-qy-read-theme="mist"] .ydw-article-page {
    background: #d8d8d8 !important;
}
body.qy-novel-reading[data-qy-read-theme="green"],
body.qy-novel-reading[data-qy-read-theme="green"] .qy-e-main,
body.qy-novel-reading[data-qy-read-theme="green"] .ydw-article-page {
    background: #c5d4bf !important;
}
body.qy-novel-reading[data-qy-read-theme="yellow"],
body.qy-novel-reading[data-qy-read-theme="yellow"] .qy-e-main,
body.qy-novel-reading[data-qy-read-theme="yellow"] .ydw-article-page {
    background: #d9c9a3 !important;
}
body.qy-novel-reading[data-qy-read-theme="cool"],
body.qy-novel-reading[data-qy-read-theme="cool"] .qy-e-main,
body.qy-novel-reading[data-qy-read-theme="cool"] .ydw-article-page {
    background: #c5d3db !important;
}
body.qy-novel-reading[data-qy-read-theme="night"],
body.qy-novel-reading[data-qy-read-theme="night"] .qy-e-main,
body.qy-novel-reading[data-qy-read-theme="night"] .ydw-article-page {
    background: #1b1b1b !important;
    color: #c8c8c8;
}

body.qy-novel-reading .qy-toc-fab {
    display: none !important;
}
body.qy-novel-reading {
    padding-top: 56px;
    /* 阅读页强调色 —— 跟随站点品牌色。
       原实现把起点红（#ed424b，约 30 处）硬编码在全页，与全站品牌绿完全脱节：
       页头 logo / 书库 / 书页都是绿，只有阅读页的 hover、书签、发表按钮是红。
       如需回到起点风红色，只改这一处 —— 把 --qy-read-accent 换成 #ed424b，
       并把下面四个变体按比例调红即可。 */
    --qy-read-accent: var(--qy-color-primary, #3d9e28);
    --qy-read-accent-strong: var(--qy-color-primary-hover, #2f6b22);
    --qy-read-accent-soft: var(--qy-color-primary-soft, #cfe3c4);
    --qy-read-accent-tint: rgba(61, 158, 40, 0.12);
    --qy-read-accent-tint-weak: rgba(61, 158, 40, 0.06);
}

/* 夜间底色上品牌绿对比度不足（≈4:1），换更亮的绿 */
body.qy-novel-reading[data-qy-read-theme="night"] {
    --qy-read-accent: var(--qy-color-primary-bright, #4caf50);
    --qy-read-accent-strong: #8ed980;
    --qy-read-accent-soft: #9fd48f;
    --qy-read-accent-tint: rgba(76, 175, 80, 0.22);
    --qy-read-accent-tint-weak: rgba(76, 175, 80, 0.12);
}

/* 键盘可达性：阅读器内交互元素统一焦点环（此前全文件只有 1 处 :focus-visible） */
body.qy-novel-reading :is(a, button, textarea, [tabindex]):focus-visible {
    outline: 2px solid var(--qy-read-accent);
    outline-offset: 2px;
}

body.qy-novel-reading .qy-novel-prose :is(a, button):focus-visible {
    outline-offset: 4px;
}

.qy-e-readhead {
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    z-index: 1100;
    height: 56px;
    background: #fff;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);
    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.04);
    color: #262626;
    transform: translateY(0);
    transition: transform 0.22s ease;
    will-change: transform;
}
.qy-e-readhead.is-hide {
    transform: translateY(-100%);
    pointer-events: none;
}
body.qy-readhead-hide .qy-novel-toc-drawer-panel {
    top: 0;
}
body.qy-readhead-hide .qy-novel-talk {
    top: 12px;
    height: calc(100vh - 24px);
    height: calc(100dvh - 24px);
    max-height: calc(100vh - 24px);
    max-height: calc(100dvh - 24px);
}
body.qy-readhead-hide .qy-novel-read-progress {
    top: 0;
}
body.qy-novel-reading[data-qy-read-theme="green"] .qy-e-readhead {
    background: #eef5ea;
}
body.qy-novel-reading[data-qy-read-theme="mist"] .qy-e-readhead {
    background: #f3f3f3;
}
body.qy-novel-reading[data-qy-read-theme="yellow"] .qy-e-readhead {
    background: #f6ead0;
}
body.qy-novel-reading[data-qy-read-theme="cool"] .qy-e-readhead {
    background: #eef5f8;
}
body.qy-novel-reading[data-qy-read-theme="night"] .qy-e-readhead {
    background: #1f1f1f;
    color: rgba(232, 232, 232, 0.88);
    border-bottom-color: rgba(255, 255, 255, 0.08);
}
.qy-e-readhead-inner {
    max-width: 1400px;
    height: 56px;
    margin: 0 auto;
    padding: 0 20px;
    display: flex;
    align-items: center;
    gap: 12px;
}
.qy-e-readhead-brand {
    display: flex;
    align-items: center;
    gap: 8px;
    color: inherit;
    text-decoration: none;
    font-weight: 700;
    font-size: 16px;
    flex-shrink: 0;
}
.qy-e-readhead-mark {
    display: block;
    width: 28px;
    height: 28px;
}
.qy-e-readhead-mark--svg {
    width: 28px;
    height: 28px;
    border-radius: 6px;
    background: var(--qy-read-accent);
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.qy-e-readhead-split {
    width: 1px;
    height: 18px;
    background: currentColor;
    opacity: 0.18;
    flex-shrink: 0;
}
.qy-e-readhead-book {
    color: inherit;
    text-decoration: none;
    font-size: 15px;
    font-weight: 600;
    max-width: 28%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.qy-e-readhead-book:hover {
    color: var(--qy-read-accent);
}
.qy-e-readhead-chap {
    flex: 1;
    min-width: 0;
    font-size: 13px;
    opacity: 0.55;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.qy-e-readhead-tools {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: 16px;
    flex-shrink: 0;
    font-size: 13px;
}
.qy-e-readhead-tools a {
    color: inherit;
    text-decoration: none;
    opacity: 0.72;
}
.qy-e-readhead-tools a:hover {
    opacity: 1;
    color: var(--qy-read-accent);
}

.qy-novel-reader-shell {
    --qy-read-bg: #f5f1e8;
    --qy-read-fg: rgba(0, 0, 0, 0.9);
    --qy-read-muted: rgba(0, 0, 0, 0.45);
    --qy-read-fs: 18px;
    --qy-read-lh: 1.8;
    /* 正文段落首行缩进：中文小说惯例 2em；想改成 1em 或不缩进，改这一个值即可 */
    --qy-read-indent: 2em;
    /* 段落间距：中文排版里段落边界由首行缩进承担，再叠大段空白会显得松垮、单屏字数变少。
       想改用「空行分段」风格：把 --qy-read-indent 设为 0，并把这里调到 1em 左右。 */
    --qy-read-para-gap: 0.35em;
    --qy-read-rail: #efe9db;
    --qy-read-face: "Microsoft YaHei", "PingFang SC", "Source Han Sans SC", sans-serif;
    --qy-read-col: 760px;
    --qy-talk-col: 300px;
    position: relative;
    max-width: min(100%, calc(var(--qy-read-col) + var(--qy-talk-col) + 136px));
    margin: 0 auto;
    padding: 12px 16px 88px;
    display: grid;
    grid-template-columns: minmax(0, 1fr) var(--qy-talk-col) 72px;
    column-gap: 8px;
    row-gap: 8px;
    align-items: start;
    color: var(--qy-read-fg);
}
.qy-novel-reader-shell[data-theme="mist"] {
    --qy-read-bg: #ececec;
    --qy-read-rail: #e0e0e0;
}
.qy-novel-reader-shell[data-theme="green"] {
    --qy-read-bg: #e8f0e3;
    --qy-read-rail: #dce8d6;
}
.qy-novel-reader-shell[data-theme="yellow"] {
    --qy-read-bg: #f3e6c4;
    --qy-read-rail: #ead7a8;
}
.qy-novel-reader-shell[data-theme="cool"] {
    --qy-read-bg: #e7f1f5;
    --qy-read-rail: #d5e4ea;
}
.qy-novel-reader-shell[data-theme="night"] {
    --qy-read-bg: #1f1f1f;
    --qy-read-fg: rgba(232, 232, 232, 0.88);
    --qy-read-muted: rgba(232, 232, 232, 0.45);
    --qy-read-rail: #2a2a2a;
}
.qy-novel-reader-shell[data-face="song"] {
    --qy-read-face: "Songti SC", "SimSun", "Noto Serif SC", "STSong", serif;
}
.qy-novel-reader-shell[data-face="kai"] {
    --qy-read-face: "Kaiti SC", "KaiTi", "STKaiti", "Noto Serif SC", serif;
}
.qy-novel-reader-shell[data-width="640"] { --qy-read-col: 640px; }
.qy-novel-reader-shell[data-width="800"] { --qy-read-col: 800px; }
.qy-novel-reader-shell[data-width="900"] { --qy-read-col: 900px; }
.qy-novel-reader-shell[data-width="1000"] { --qy-read-col: 1000px; }
.qy-novel-reader-shell[data-width="1280"] { --qy-read-col: 1280px; }

.qy-novel-paper {
    background: var(--qy-read-bg);
    border-radius: 4px;
    padding: 28px 40px 48px 48px;
    min-height: 70vh;
    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06);
    position: relative;
}
.qy-novel-reader-shell.is-talk-off {
    --qy-talk-col: 0px;
    grid-template-columns: minmax(0, 1fr) 72px;
    max-width: min(100%, calc(var(--qy-read-col) + 104px));
}
.qy-novel-reader-shell.is-talk-off .qy-novel-talk {
    display: none;
}
.qy-novel-reader-shell.is-talk-off .qy-novel-paper {
    border-radius: 4px 4px 0 0;
    padding-right: 48px;
}
.qy-novel-read-progress {
    position: fixed;
    left: 0;
    right: 0;
    top: 56px;
    z-index: 1200;
    height: 2px;
    margin: 0;
    pointer-events: none;
    background: transparent;
    transition: top 0.22s ease;
}
.qy-novel-read-progress > span {
    display: block;
    height: 100%;
    width: 0;
    background: var(--qy-read-accent);
}

.qy-novel-reader-shell .qy-e-crumb,
.qy-novel-reader-shell .qy-novel-crumb {
    font-size: 13px;
    color: var(--qy-read-muted);
    margin: 0 0 20px;
    text-align: left;
}
.qy-novel-reader-shell .qy-e-crumb a,
.qy-novel-reader-shell .qy-novel-crumb a {
    color: inherit;
    text-decoration: none;
}
.qy-novel-reader-shell .qy-e-crumb a:hover,
.qy-novel-reader-shell .qy-novel-crumb a:hover {
    color: var(--qy-read-fg);
}

.qy-novel-paper-mark {
    position: absolute;
    top: 36px;
    right: 28px;
    z-index: 6;
    width: 28px;
    height: 42px;
    padding: 0;
    border: 0;
    background: transparent;
    cursor: pointer;
    color: #d8d0c0;
}
.qy-novel-paper-mark svg {
    display: block;
    width: 28px;
    height: 42px;
    fill: #efe8d8;
    stroke: #c4bbab;
    stroke-width: 1.2;
    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.08));
}
.qy-novel-paper-mark.is-on svg {
    fill: var(--qy-read-accent);
    stroke: var(--qy-read-accent);
    color: var(--qy-read-accent);
}
.qy-novel-paper-mark-tip {
    position: absolute;
    right: -4px;
    top: auto;
    bottom: calc(100% + 8px);
    background: #2b2b2b;
    color: #fff;
    font-size: 12px;
    line-height: 1;
    padding: 7px 10px;
    border-radius: 4px;
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    z-index: 8;
}
.qy-novel-paper-mark-tip::after {
    content: "";
    position: absolute;
    left: auto;
    right: 10px;
    top: 100%;
    margin-top: 0;
    border: 5px solid transparent;
    border-left-color: transparent;
    border-top-color: #2b2b2b;
}
.qy-novel-paper-mark:hover .qy-novel-paper-mark-tip,
.qy-novel-paper-mark:focus-visible .qy-novel-paper-mark-tip {
    opacity: 1;
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-paper-mark svg {
    fill: #3a3a3a;
    stroke: #666;
}
.qy-novel-toast {
    position: fixed;
    left: 50%;
    top: 88px;
    z-index: 2600;
    transform: translateX(-50%);
    background: rgba(0, 0, 0, 0.78);
    color: #fff;
    font-size: 13px;
    padding: 8px 16px;
    border-radius: 4px;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.16s ease;
}
.qy-novel-toast.is-on { opacity: 1; }

.qy-novel-text-head {
    text-align: left;
    margin: 0 0 28px;
    padding: 0 48px 24px 0;
    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-text-head {
    border-bottom-color: rgba(255, 255, 255, 0.1);
}
.qy-novel-talk-heat {
    margin: 0 0 12px;
}
.qy-novel-talk-heat button {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: 0;
    padding: 0;
    background: transparent;
    color: var(--qy-read-muted);
    font-size: 13px;
    cursor: pointer;
}
.qy-novel-talk-heat button:hover {
    color: var(--qy-read-accent);
}
.qy-novel-talk-flame {
    width: 14px;
    height: 14px;
    fill: #ed6a2b;
}
.qy-novel-chapter-title {
    font-size: 28px;
    font-weight: 700;
    line-height: 1.4;
    margin: 0 0 14px;
    color: var(--qy-read-fg);
    letter-spacing: 0.02em;
}
.qy-novel-talk-badge {
    display: inline-block;
    margin-left: 8px;
    vertical-align: 6px;
    min-width: 1.4em;
    padding: 1px 6px;
    border: 0;
    border-radius: 4px;
    background: rgba(0, 0, 0, 0.08);
    color: var(--qy-read-muted);
    font-size: 12px;
    font-weight: 500;
    line-height: 1.5;
    cursor: pointer;
}
.qy-novel-talk-badge:hover {
    color: var(--qy-read-accent);
    background: var(--qy-read-accent-tint);
}
.qy-novel-talk-badge[hidden] { display: none; }
.qy-novel-chapter-meta {
    font-size: 13px;
    color: var(--qy-read-muted);
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-start;
    gap: 0.35rem 1.1rem;
}
.qy-novel-meta-i a {
    color: inherit;
    text-decoration: none;
}
.qy-novel-meta-i a:hover { color: var(--qy-read-accent); }

.qy-novel-reader-shell .qy-novel-prose {
    max-width: var(--qy-read-col);
    margin: 0;
    font-size: var(--qy-read-fs);
    line-height: var(--qy-read-lh);
    color: var(--qy-read-fg);
    font-family: var(--qy-read-face);
    /* 中文断行：strict 启用更完整的禁则处理，避免「。」「）」等标点落到行首 /
       行尾，也避免行首出现收尾标点；break-word 兜住超长无空格串（URL、ISBN）。 */
    line-break: strict;
    overflow-wrap: break-word;
    word-break: normal;
}
.qy-novel-reader-shell .qy-novel-prose p {
    /* 首行缩进承担段落边界，段间距只留极轻呼吸（原 0.7em 是「缩进 + 空行」双重分隔） */
    margin: 0 0 var(--qy-read-para-gap, 0.35em);
    text-indent: var(--qy-read-indent, 2em);
}
/* 正文内的图片/分割线等不参与首行缩进 */
.qy-novel-reader-shell .qy-novel-prose > *:first-child {
    margin-top: 0;
}
.qy-novel-reader-shell .qy-novel-prose > *:last-child {
    margin-bottom: 0;
}

.qy-novel-pager {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    margin: 2.5rem 0 0;
    flex-wrap: wrap;
    font-size: 14px;
}
.qy-novel-pager a {
    color: var(--qy-read-fg);
    text-decoration: none;
}
.qy-novel-pager a:hover {
    color: var(--qy-read-accent);
}
.qy-novel-pager .is-off {
    color: var(--qy-read-muted);
    pointer-events: none;
}

/* 章末翻页：只保留一行「上一章 / 目录 / 下一章」，去掉原先重复的短版翻页 */
.qy-novel-pager--once {
    margin: 2rem 0 0;
    gap: 12px;
}
.qy-novel-pager--once .qy-novel-pager-cat {
    flex: 0 0 auto;
    padding: 6px 18px;
    border: 1px solid rgba(0, 0, 0, 0.14);
    border-radius: 999px;
    font-size: 13px;
}
.qy-novel-pager--once .qy-novel-pager-cat:hover {
    border-color: var(--qy-read-accent);
}
.qy-novel-pager--once .qy-novel-pager-side {
    flex: 1 1 38%;
    min-width: 0;
    max-width: 42%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.qy-novel-pager--once .qy-novel-pager-side:last-child {
    text-align: right;
}
.qy-novel-pager-tag {
    display: inline-block;
    margin-right: 6px;
    padding: 1px 6px;
    border-radius: 3px;
    background: rgba(0, 0, 0, 0.06);
    color: var(--qy-read-muted);
    font-size: 12px;
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-pager--once .qy-novel-pager-cat {
    border-color: rgba(255, 255, 255, 0.16);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-pager-tag {
    background: rgba(255, 255, 255, 0.1);
}

/* 章末「扫一扫 手机接着读」 */
.qy-novel-scan {
    display: flex;
    align-items: center;
    gap: 16px;
    margin: 2rem 0 0;
    padding: 14px 16px;
    border: 1px solid rgba(0, 0, 0, 0.1);
    border-radius: 10px;
    background: rgba(255, 255, 255, 0.45);
}
.qy-novel-scan[hidden] {
    display: none;
}
.qy-novel-scan-qr {
    flex: 0 0 auto;
    width: 116px;
    height: 116px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 6px;
    background: #fff;
    border: 1px solid rgba(0, 0, 0, 0.1);
    border-radius: 8px;
}
.qy-novel-scan-qr canvas {
    display: block;
    image-rendering: pixelated;
}
.qy-novel-scan-txt {
    min-width: 0;
}
.qy-novel-scan-txt strong {
    display: block;
    margin: 0 0 6px;
    font-size: 15px;
    color: var(--qy-read-fg);
}
.qy-novel-scan-txt p {
    margin: 0;
    font-size: 13px;
    line-height: 1.7;
    color: var(--qy-read-muted);
}
.qy-novel-scan-url {
    margin-top: 6px;
    word-break: break-all;
}
.qy-novel-scan-copy {
    border: 0;
    padding: 0;
    background: transparent;
    color: var(--qy-read-accent);
    font-size: 13px;
    cursor: pointer;
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-scan {
    border-color: rgba(255, 255, 255, 0.14);
    background: rgba(255, 255, 255, 0.05);
}

/* 阅读页精简页脚：章页正文之后只保留一行版权 / 备案 */
body.qy-novel-reading .qy-e-foot--read {
    margin: 0;
    padding: 14px 0 20px;
    background: transparent;
    border-top: 1px solid rgba(0, 0, 0, 0.08);
    font-size: 12px;
    color: rgba(0, 0, 0, 0.5);
}
body.qy-novel-reading[data-qy-read-theme="night"] .qy-e-foot--read {
    border-top-color: rgba(255, 255, 255, 0.1);
    color: rgba(232, 232, 232, 0.5);
}
body.qy-novel-reading .qy-e-foot--read .qy-e-wrap {
    max-width: 920px;
    padding: 0 20px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 6px 16px;
}
body.qy-novel-reading .qy-e-foot--read .qy-e-foot-read-copy {
    margin: 0;
}
body.qy-novel-reading .qy-e-foot--read .qy-e-foot-read-nav {
    display: flex;
    gap: 14px;
}
body.qy-novel-reading .qy-e-foot--read a {
    color: inherit;
    text-decoration: none;
    opacity: 0.8;
}
body.qy-novel-reading .qy-e-foot--read a:hover {
    color: var(--qy-read-accent);
    opacity: 1;
}

.qy-novel-rail {
    position: sticky;
    top: 88px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-left: 12px;
}
.qy-novel-rail-btn,
.qy-novel-rail a.qy-novel-rail-btn {
    width: 64px;
    height: 64px;
    border: 0;
    border-radius: 10px;
    background: var(--qy-read-rail);
    color: var(--qy-read-fg);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    font-size: 12px;
    text-decoration: none;
    cursor: pointer;
    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.04);
}
.qy-novel-rail-btn:hover,
.qy-novel-rail a.qy-novel-rail-btn:hover {
    filter: brightness(0.97);
}
.qy-novel-rail-btn svg {
    width: 22px;
    height: 22px;
}

.qy-novel-settings {
    display: none;
    position: fixed;
    right: 96px;
    top: 72px;
    z-index: 2500;
    width: 360px;
    max-width: calc(100vw - 24px);
    padding: 20px 20px 16px;
    border-radius: 16px;
    background: #f7f4ee;
    color: #222;
    box-shadow: 0 16px 48px rgba(0, 0, 0, 0.18);
}
.qy-novel-settings.is-open {
    display: block;
}
.qy-novel-settings-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin: 0 0 16px;
}
.qy-novel-settings h3 {
    margin: 0;
    font-size: 18px;
    font-weight: 600;
}
.qy-novel-settings-close {
    width: 28px;
    height: 28px;
    border: 0;
    border-radius: 50%;
    background: transparent;
    font-size: 20px;
    line-height: 1;
    cursor: pointer;
    color: #888;
}
.qy-novel-set-row {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin: 0 0 16px;
    font-size: 13px;
}
.qy-novel-set-row > span {
    width: 64px;
    flex-shrink: 0;
    padding-top: 6px;
    color: #888;
}
.qy-novel-set-ctrl {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    flex: 1;
    align-items: center;
}
.qy-novel-chip {
    border: 1px solid #e6e2da;
    background: #f3f0ea;
    color: #333;
    border-radius: 999px;
    padding: 6px 14px;
    cursor: pointer;
    font-size: 13px;
}
.qy-novel-chip.is-on {
    background: #fff;
    border-color: var(--qy-read-accent);
    color: var(--qy-read-accent);
    box-shadow: 0 0 0 1px var(--qy-read-accent);
}
.qy-novel-size {
    display: flex;
    align-items: stretch;
    border-radius: 999px;
    overflow: hidden;
    background: #ece8e1;
    flex: 1;
}
.qy-novel-size button,
.qy-novel-size strong {
    flex: 1;
    border: 0;
    background: transparent;
    padding: 8px 0;
    text-align: center;
    font-size: 14px;
    color: #333;
}
.qy-novel-size button { cursor: pointer; }
.qy-novel-size strong {
    border-left: 1px solid #ddd6cc;
    border-right: 1px solid #ddd6cc;
    font-weight: 600;
}
.qy-novel-swatch {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    border: 2px solid transparent;
    padding: 0;
    cursor: pointer;
    position: relative;
}
.qy-novel-swatch[data-theme="mist"] { background: #e4e4e4; }
.qy-novel-swatch[data-theme="paper"] { background: #f5f1e8; }
.qy-novel-swatch[data-theme="yellow"] { background: #f3e6c4; }
.qy-novel-swatch[data-theme="green"] { background: #cfe3c4; }
.qy-novel-swatch[data-theme="cool"] { background: #d7e8ef; }
.qy-novel-swatch[data-theme="night"] { background: #2a2a2a; }
.qy-novel-swatch.is-on {
    box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--qy-read-accent);
}
.qy-novel-swatch.is-on::after {
    content: "✓";
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--qy-read-accent);
    font-size: 14px;
    font-weight: 700;
}
.qy-novel-swatch--night.is-on::after { color: #fff; }
.qy-novel-set-hint {
    margin: 4px 0 0 76px;
    font-size: 12px;
    color: #999;
}
.qy-novel-set-row--switch {
    align-items: center;
}
.qy-novel-set-row--switch > span {
    width: 72px;
    padding-top: 0;
}
.qy-novel-set-switch {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1;
    min-width: 0;
}
.qy-novel-switch {
    width: 44px;
    height: 24px;
    border: 0;
    border-radius: 12px;
    background: #cfcbc4;
    position: relative;
    cursor: pointer;
    flex-shrink: 0;
    padding: 0;
}
.qy-novel-switch::after {
    content: "";
    position: absolute;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    background: #fff;
    top: 2px;
    left: 2px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
    transition: transform 0.18s ease;
}
.qy-novel-switch.is-on,
.qy-novel-switch[aria-checked="true"] {
    background: var(--qy-read-accent);
}
.qy-novel-switch.is-on::after,
.qy-novel-switch[aria-checked="true"]::after {
    transform: translateX(20px);
}
.qy-novel-set-switch em {
    font-style: normal;
    font-size: 13px;
    color: #8a8a8a;
    line-height: 1.3;
}
.qy-novel-reader-shell[data-talk-dots="0"] .qy-novel-talk-badge,
.qy-novel-reader-shell[data-talk-dots="0"] .qy-novel-para-n {
    display: none !important;
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-switch:not(.is-on) {
    background: #4a4a4a;
}

.qy-novel-toc-drawer {
    position: fixed;
    inset: 0;
    z-index: 2800;
    display: none;
}
.qy-novel-toc-drawer.is-open { display: block; }
.qy-novel-toc-drawer-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.35);
}
.qy-novel-toc-drawer-panel {
    position: absolute;
    top: 56px;
    right: 0;
    bottom: 0;
    transition: top 0.22s ease;
    width: min(360px, 92vw);
    height: auto;
    overflow: auto;
    background: var(--qy-read-bg, #f5f1e8);
    color: var(--qy-read-fg, #191919);
    padding: 20px 16px 24px;
    box-shadow: -8px 0 24px rgba(0, 0, 0, 0.12);
}
.qy-novel-toc-drawer-panel h2 {
    margin: 0 0 12px;
    font-size: 16px;
}
.qy-novel-toc-drawer-panel a {
    display: block;
    padding: 8px 6px;
    color: inherit;
    text-decoration: none;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);
    font-size: 14px;
}
.qy-novel-toc-drawer-panel a.is-current {
    color: var(--qy-read-accent);
}
.qy-novel-toc-tabs {
    display: flex;
    gap: 16px;
    margin: 0 0 12px;
    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}
.qy-novel-toc-tabs button {
    border: 0;
    background: transparent;
    padding: 8px 0;
    cursor: pointer;
    color: inherit;
    opacity: 0.55;
    font-size: 15px;
}
.qy-novel-toc-tabs button.is-on {
    opacity: 1;
    font-weight: 600;
    box-shadow: inset 0 -2px 0 var(--qy-read-accent);
}
.qy-novel-mark-add {
    display: inline-block;
    margin: 0 0 12px;
    border: 1px solid var(--qy-read-accent);
    background: #fff;
    color: var(--qy-read-accent);
    border-radius: 6px;
    padding: 6px 12px;
    cursor: pointer;
}
.qy-novel-talk {
    position: sticky;
    top: 68px;
    display: flex;
    flex-direction: column;
    height: calc(100vh - 80px);
    height: calc(100dvh - 80px);
    max-height: calc(100vh - 80px);
    max-height: calc(100dvh - 80px);
    margin: 0;
    padding: 14px 12px 12px;
    border: 0;
    scroll-margin-top: 68px;
    background-color: var(--qy-read-bg);
    background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.06));
    border-radius: 14px;
    box-shadow: 0 8px 28px rgba(70, 50, 20, 0.07), 0 0 0 1px rgba(0, 0, 0, 0.04);
    min-width: 0;
    box-sizing: border-box;
    overflow: hidden;
}
.qy-novel-talk-head {
    margin: 0 0 12px;
    padding: 2px 32px 0 4px;
    font-size: 15px;
    font-weight: 650;
    letter-spacing: 0.04em;
    display: flex;
    align-items: center;
    gap: 8px;
    position: relative;
}
.qy-novel-talk-head-title {
    font-size: 15px;
}
.qy-novel-talk-head-n,
.qy-novel-talk-head span.qy-novel-talk-head-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 20px;
    padding: 0 7px;
    border-radius: 999px;
    background: var(--qy-read-accent-tint);
    color: var(--qy-read-accent-strong);
    font-size: 11px;
    font-weight: 650;
    letter-spacing: 0;
}
.qy-novel-talk-close {
    position: absolute;
    top: -2px;
    right: -2px;
    width: 28px;
    height: 28px;
    border: 0;
    border-radius: 50%;
    background: transparent;
    color: inherit;
    font-size: 18px;
    line-height: 1;
    cursor: pointer;
    opacity: 0.4;
}
.qy-novel-talk-close:hover {
    opacity: 1;
    background: rgba(0, 0, 0, 0.06);
}
.qy-novel-talk-scroll {
    flex: 1 1 auto;
    min-height: 0;
    overflow: auto;
    padding: 2px 2px 8px;
    margin: 0 -2px;
}
.qy-novel-talk-compose {
    flex: 0 0 auto;
    margin: 4px 0 0;
    padding: 12px 4px 2px;
    border-top: 1px dashed rgba(0, 0, 0, 0.08);
}
.qy-novel-talk .qy-novel-talk-form {
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
}
.qy-novel-talk .qy-novel-talk-form button {
    width: 100%;
    height: 36px;
    border-radius: 999px;
    font-size: 13px;
    letter-spacing: 0.06em;
}
.qy-novel-talk-form {
    display: flex;
    align-items: flex-end;
    gap: 8px;
}
.qy-novel-talk-form button {
    flex: 0 0 auto;
    margin: 0;
    border: 0;
    background: var(--qy-read-accent);
    color: #fff;
    border-radius: 999px;
    padding: 8px 14px;
    cursor: pointer;
    height: 36px;
}
.qy-novel-talk-form button:hover {
    background: var(--qy-read-accent-strong);
}
.qy-novel-empty {
    margin: 28px 8px;
    text-align: center;
    font-size: 13px;
    color: var(--qy-read-muted, #888);
    line-height: 1.7;
}
.qy-novel-empty span {
    display: block;
    margin-top: 4px;
    font-size: 12px;
    opacity: 0.8;
}
.qy-novel-talk-form textarea {
    display: block;
    flex: 1 1 auto;
    width: auto;
    min-width: 0;
    margin: 0;
    padding: 10px 12px;
    min-height: 72px;
    max-height: 120px;
    resize: none;
    border: 0;
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.72);
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06);
    font: inherit;
    font-size: 13px;
    line-height: 1.55;
    color: inherit;
}
.qy-novel-talk-form textarea:focus {
    outline: none;
    box-shadow: inset 0 0 0 1px rgba(201, 80, 70, 0.45);
    background: #fff;
}
.qy-novel-talk-item {
    display: grid;
    grid-template-columns: 36px minmax(0, 1fr);
    gap: 2px 10px;
    padding: 12px 4px 14px;
    margin: 0;
    border: 0;
    border-bottom: 1px solid rgba(0, 0, 0, 0.06);
    border-radius: 0;
    background: transparent;
    font-size: 13px;
}
.qy-novel-talk-item-main { min-width: 0; }
.qy-novel-talk-item-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 4px;
}
.qy-novel-talk-avatar {
    flex: 0 0 auto;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: #d9d4cc;
    color: #fff;
    font-size: 13px;
    font-weight: 650;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    grid-row: 1 / span 4;
}
.qy-novel-talk-avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.qy-novel-talk-item strong {
    display: block;
    margin: 0;
    font-size: 13px;
    font-weight: 500;
    color: var(--qy-read-muted, #888);
    opacity: 1;
}
.qy-novel-talk-item p {
    margin: 0;
    line-height: 1.65;
    font-size: 14px;
    color: var(--qy-read-fg);
}
.qy-novel-talk-foot {
    margin: 6px 0 0;
    font-size: 12px;
    color: #b0aaa2;
    line-height: 1.4;
}
.qy-novel-talk-login {
    font-size: 13px;
    margin: 0;
    padding: 10px 12px;
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.5);
    color: var(--qy-read-muted, #888);
    line-height: 1.55;
}
.qy-novel-talk-login a {
    color: var(--qy-read-accent-strong);
    text-decoration: none;
    font-weight: 600;
}
.qy-novel-talk-login a:hover {
    text-decoration: underline;
}
.qy-novel-talk-filters {
    display: flex;
    gap: 2px;
    margin: 0 0 10px;
    padding: 3px;
    border-radius: 999px;
    background: rgba(0, 0, 0, 0.045);
}
.qy-novel-talk-filters button {
    flex: 1 1 0;
    border: 0;
    background: transparent;
    color: var(--qy-read-muted, #888);
    opacity: 1;
    padding: 6px 0;
    cursor: pointer;
    font: inherit;
    font-size: 12px;
    border-radius: 999px;
}
.qy-novel-talk-filters button.is-on {
    opacity: 1;
    font-weight: 650;
    color: var(--qy-read-accent-strong);
    background: #fff;
    box-shadow: 0 1px 3px rgba(40, 20, 10, 0.08);
}
.qy-novel-talk-quote {
    margin: 0 0 10px;
    padding: 8px 10px 8px 12px;
    border-radius: 10px;
    background: var(--qy-read-accent-tint-weak);
    border-left: 2px solid var(--qy-read-accent);
    font-size: 12px;
}
.qy-novel-talk-quote blockquote {
    margin: 0 0 6px;
    font-style: normal;
    color: var(--qy-read-muted, #666);
    line-height: 1.5;
}
.qy-novel-talk-quote button {
    border: 0;
    background: none;
    color: var(--qy-read-accent-strong);
    cursor: pointer;
    padding: 0;
    font: inherit;
    font-size: 12px;
}
.qy-novel-talk-quote-chip {
    display: block;
    width: 100%;
    text-align: left;
    border: 0;
    background: var(--qy-read-accent-tint-weak);
    color: var(--qy-read-accent-strong);
    border-radius: 8px;
    padding: 7px 9px;
    margin: 0 0 8px;
    cursor: pointer;
    font-size: 12px;
    line-height: 1.5;
    border-left: 2px solid var(--qy-read-accent-soft);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk {
    background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(0, 0, 0, 0.12));
    box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(255, 255, 255, 0.06);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-login,
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-form textarea {
    background: rgba(255, 255, 255, 0.05);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-item {
    background: transparent;
    border-bottom-color: rgba(255, 255, 255, 0.08);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-foot {
    color: #888;
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-form textarea:focus {
    background: rgba(255, 255, 255, 0.08);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-filters {
    background: rgba(255, 255, 255, 0.06);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-filters button.is-on {
    background: #333;
    color: var(--qy-read-accent-soft);
    box-shadow: none;
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-head-n {
    background: var(--qy-read-accent-tint);
    color: var(--qy-read-accent-soft);
}
.qy-novel-reader-shell[data-theme="night"] .qy-novel-talk-close:hover {
    background: rgba(255, 255, 255, 0.08);
}
.qy-novel-quote-bar {
    position: absolute;
    z-index: 2500;
    display: flex;
    gap: 6px;
    padding: 4px;
    background: #2b2b2b;
    border-radius: 8px;
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.2);
}
.qy-novel-quote-bar[hidden] { display: none !important; }
.qy-novel-quote-bar button {
    border: 0;
    background: transparent;
    color: #fff;
    padding: 6px 10px;
    cursor: pointer;
    font-size: 13px;
    border-radius: 6px;
}
.qy-novel-quote-bar button:hover { background: rgba(255, 255, 255, 0.12); }
.qy-novel-prose [data-para-index] { position: relative; }
.qy-novel-para-n {
    position: absolute;
    right: -8px;
    top: 0;
    transform: translateX(100%);
    min-width: 18px;
    height: 18px;
    border: 0;
    border-radius: 9px;
    background: var(--qy-read-accent);
    color: #fff;
    font-size: 11px;
    line-height: 18px;
    padding: 0 5px;
    cursor: pointer;
}
.qy-novel-prose [data-para-index].is-quote-on {
    outline: 2px solid var(--qy-read-accent-soft);
    outline-offset: 4px;
}
.qy-novel-rail-btn[aria-pressed="true"] {
    color: var(--qy-read-accent);
}
.qy-novel-rail-top {
    opacity: 0;
    pointer-events: none;
    color: var(--qy-read-accent);
}
.qy-novel-rail-top.is-show {
    opacity: 1;
    pointer-events: auto;
}

@media (max-width: 1100px) {
    .qy-novel-reader-shell {
        grid-template-columns: minmax(0, 1fr) 72px;
        max-width: min(100%, calc(var(--qy-read-col) + 104px));
    }
    .qy-novel-talk {
        grid-column: 1;
        position: static;
        height: auto;
        max-height: min(70vh, 640px);
        border-radius: 14px;
    }
    .qy-novel-paper {
        border-radius: 4px;
        padding-right: 48px;
    }
    .qy-novel-talk .qy-novel-talk-form {
        flex-direction: column;
        align-items: stretch;
    }
    .qy-novel-talk .qy-novel-talk-form button {
        width: 100%;
    }
    body.qy-readhead-hide .qy-novel-talk {
        top: auto;
        height: auto;
        max-height: min(70vh, 640px);
    }
}

@media (max-width: 860px) {
    .qy-novel-reader-shell,
    .qy-novel-reader-shell.is-talk-off {
        grid-template-columns: 1fr;
        max-width: 100%;
        padding: 0 0 calc(80px + env(safe-area-inset-bottom, 0px));
    }
    .qy-e-readhead-chap {
        display: none;
    }
    .qy-novel-chapter-title {
        font-size: 22px;
    }
    .qy-novel-rail {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        top: auto;
        flex-direction: row;
        justify-content: space-around;
        background: var(--qy-read-rail);
        padding: 6px 8px calc(6px + env(safe-area-inset-bottom, 0px));
        z-index: 15;
        gap: 0;
        transition: transform 0.22s ease;
        will-change: transform;
    }
    body.qy-readhead-hide .qy-novel-rail {
        transform: translateY(100%);
        pointer-events: none;
    }
    .qy-novel-rail {
        margin-left: 0;
    }
    .qy-novel-rail-btn,
    .qy-novel-rail a.qy-novel-rail-btn {
        width: auto;
        height: 52px;
        background: transparent;
        box-shadow: none;
        flex: 1;
    }
    .qy-novel-settings {
        right: 12px;
        left: 12px;
        width: auto;
        top: auto;
        bottom: 68px;
        max-height: calc(100vh - 90px);
        overflow: auto;
    }
    .qy-novel-rail-top {
        opacity: 1;
        pointer-events: auto;
    }
    /* 手机端本身就是「手机读」，无需扫码 */
    .qy-novel-scan {
        display: none !important;
    }
    .qy-novel-pager--once .qy-novel-pager-side {
        flex: 1 1 100%;
        max-width: 100%;
        text-align: left;
    }
}
