{"id":"fa75d3ad-0a29-4417-84ab-ba4b9e0f643c","authorId":"WINJwQyWV44Lw9Cvqoeox6AugLmKG6iq","title":"虐阴协会（紫竹铃事件）","description":"现实都市背景的多路线成人互动卡。你可以扮演受虐者、施虐者或调查者，体验一个地下控制组织的完整运作。含数值系统、投票机制、堕落等级。","background":"wwzc6g2zs6q51tyjyirlu1h8.webp","backgroundWidth":960,"backgroundHeight":640,"cover":"n0mo7da4oro9kdmicdakes30.webp","coverWidth":960,"coverHeight":640,"introPage":"dd94om4v6ujwbftprfbnuzht.html","changelog":"","createdAt":"2026-08-06T19:59:42.296Z","updatedAt":"2026-08-07T07:43:12.200Z","initPublicAt":"2026-08-07T00:23:51.052Z","renderTemplate":null,"assistantRegexReplace":[],"enableMemorySchema":false,"memorySchema":null,"injectStyles":"<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>虐阴协会 - 世界观与角色定制</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n<body class=\"day-mode\"> <!-- 初始设置为白天模式 -->\n\n    <!-- 可跳过的开场动画 -->\n    <div id=\"introAnimation\" class=\"intro-animation\">\n        <div class=\"intro-content\">\n            <h1>欢迎来到 虐阴协会</h1>\n            <p>一切的起点，亦是终点。</p>\n            <button id=\"skipIntro\" class=\"action-button\">跳过开场动画</button>\n        </div>\n    </div>\n\n    <!-- 全局动态漂浮物和天气背景层 -->\n    <div class=\"global-floating-elements\"></div>\n    <div class=\"weather-overlay rain-effect\"></div> <!-- 默认下雨 -->\n\n\n    <div class=\"main-container\">\n        <header class=\"page-header\">\n            <div class=\"title-main\">虐阴 协 会</div>\n            <div class=\"title-sub\">T H E · A S S O C I A T I O N</div>\n            <div class=\"divider\"></div>\n        </header>\n\n        <!-- 昼夜模式切换按钮 -->\n        <button id=\"themeToggle\" class=\"theme-toggle\">🌙</button>\n\n        <!-- 标签导航 -->\n        <nav class=\"tab-navigation\">\n            <button class=\"tab-button active\" data-tab=\"worldview\">世界观</button>\n            <button class=\"tab-button\" data-tab=\"timeline\">时间轴</button>\n            <button class=\"tab-button\" data-tab=\"route-selection\">路线选择</button>\n            <button class=\"tab-button\" data-tab=\"character-config\">角色配置</button>\n        </nav>\n\n        <!-- 内容区域 -->\n        <div class=\"content-wrapper\">\n\n            <!-- 世界观内容 -->\n            <section id=\"worldview\" class=\"tab-content active\">\n                <div class=\"section-title\">00 · 世 界 观 概 览</div>\n                <div class=\"content-card\">\n                    <p>在遥远的彼方，或近在咫尺的黑暗中，存在着一个不为人知的隐秘组织——“虐阴协会”。他们以人类深层欲望为食，以扭曲的法则维系着平衡，亦或是混乱。加入他们，成为猎物、猎手，抑或是那个试图打破一切的破局者。</p>\n                    <p>这个世界由欲望与痛苦交织，每一个选择都将你推向深渊的更深处，或是揭示隐藏在光明下的真相。请谨慎做出你的选择，因为一旦踏入，便无回头之路。</p>\n                </div>\n            </section>\n\n            <!-- 时间轴内容 -->\n            <section id=\"timeline\" class=\"tab-content\">\n                <div class=\"section-title\">00 · 时 间 轴</div>\n                <div class=\"content-card\">\n                    <h3 class=\"card-subtitle\">【起源】未知纪元</h3>\n                    <p>协会的成立时间无从考证，其历史被层层迷雾包裹。有传言称，它与人类文明的诞生同步，只是以不同的形态存在于世。</p>\n                    <h3 class=\"card-subtitle\">【崛起】17世纪</h3>\n                    <p>随着社会隐秘欲望的滋生，协会开始浮出水面。通过渗透上层社会，他们建立起严密的内部体系，并制定了“狩猎法则”。</p>\n                    <h3 class=\"card-subtitle\">【繁盛】19世纪末-20世纪初</h3>\n                    <p>工业革命带来的社会变革与人性的异化，为协会提供了前所未有的“猎场”。“狩猎”行动达到顶峰，无数人在暗中沦为祭品。</p>\n                    <h3 class=\"card-subtitle\">【危机】20世纪末</h3>\n                    <p>信息时代的到来，威胁着协会的隐秘性。内部出现裂痕，一些成员开始质疑其存在的意义。外部则有少数“破局者”试图揭露真相。</p>\n                    <h3 class=\"card-subtitle\">【当下】混沌纪元</h3>\n                    <p>协会处于一个关键的十字路口。它能否在光明的审视下继续存在？你，将扮演怎样的角色，影响这个古老组织的命运？</p>\n                </div>\n            </section>\n\n            <!-- 路线选择 (原内容) -->\n            <section id=\"route-selection\" class=\"tab-content\">\n                <div class=\"section-title\">01 · 选择 路 线</div>\n\n                <div class=\"content-card\">\n                    <div class=\"card-subtitle\">🅰 猎 物 · 受虐者视角</div>\n                    <div class=\"card-description\">你是被协会选中的目标。恐惧、屈辱、挣扎——或者沉沦。</div>\n                    <div class=\"options-group\">\n                        <button class=\"option-button route-option\" data-route=\"A1\">A1 紫竹铃</button>\n                        <button class=\"option-button route-option\" data-route=\"A2\">A2 自建角色</button>\n                    </div>\n                </div>\n\n                <div class=\"content-card\">\n                    <div class=\"card-subtitle\">🅱 猎 手 · 执行者视角</div>\n                    <div class=\"card-description\">你是协会的刀刃。任务、手段、权力——以及深渊的凝视。</div>\n                    <div class=\"options-group\">\n                        <button class=\"option-button route-option\" data-route=\"B1\">B1 棋手</button>\n                        <button class=\"option-button route-option\" data-route=\"B2\">B2 新任执行官</button>\n                        <button class=\"option-button route-option\" data-route=\"B3\">B3 核心成员</button>\n                    </div>\n                </div>\n\n                <div class=\"content-card\">\n                    <div class=\"card-subtitle\">🅲 破 局 者 · 调查者视角</div>\n                    <div class=\"card-description\">你试图揭开真相。但真相的代价，你承受得起吗？</div>\n                    <div class=\"options-group\">\n                        <button class=\"option-button route-option\" data-route=\"C1\">C1 调查记者</button>\n                        <button class=\"option-button route-option\" data-route=\"C2\">C2 朋友</button>\n                        <button class=\"option-button route-option\" data-route=\"C3\">C3 警方</button>\n                    </div>\n                </div>\n\n                <div class=\"content-card\">\n                    <div class=\"card-subtitle\">🅳 自 由 模 式</div>\n                    <div class=\"card-description\">自定义你的身份、立场与故事起点。</div>\n                    <div class=\"options-group\">\n                        <button class=\"option-button route-option\" data-route=\"D1\">D1 完全自定义</button>\n                    </div>\n                </div>\n            </section>\n\n            <!-- 角色信息 (原内容，改造为表单) -->\n            <section id=\"character-config\" class=\"tab-content\">\n                <div class=\"section-title\">02 · 角 色 信 息</div>\n                <div class=\"section-description\">选择预设角色将跳过此页，或点击下方【随机生成】。</div>\n\n                <div class=\"content-card\">\n                    <div class=\"form-group\">\n                        <label for=\"charName\">姓 名</label>\n                        <input type=\"text\" id=\"charName\" placeholder=\"留空则由系统随机生成\">\n                    </div>\n\n                    <div class=\"form-group\">\n                        <label for=\"charAge\">年 龄</label>\n                        <input type=\"number\" id=\"charAge\" placeholder=\"留空则由系统随机生成\" min=\"16\" max=\"99\">\n                    </div>\n\n                    <div class=\"form-group\">\n                        <label>身 材</label>\n                        <div class=\"options-group radio-group\" id=\"bodyShapeOptions\">\n                            <button class=\"option-button select-char-option\" data-category=\"bodyShape\" data-value=\"娇小纤细\">娇小纤细</button>\n                            <button class=\"option-button select-char-option\" data-category=\"bodyShape\" data-value=\"匀称标准\">匀称标准</button>\n                            <button class=\"option-button select-char-option\" data-category=\"bodyShape\" data-value=\"丰满圆润\">丰满圆润</button>\n                            <button class=\"option-button select-char-option\" data-category=\"bodyShape\" data-value=\"高挑健美\">高挑健美</button>\n                            <button class=\"option-button select-char-option\" data-category=\"bodyShape\" data-value=\"自定义\">自定义</button>\n                        </div>\n                    </div>\n\n                    <div class=\"form-group\">\n                        <label>私 密 特 征</label>\n                        <div class=\"section-description\">根据角色性别选择</div>\n                        <div class=\"feature-group female\">\n                            <div class=\"feature-title\">♀ 阴部特征</div>\n                            <div class=\"options-group radio-group\" id=\"femalePrivateOptions\">\n                                <button class=\"option-button select-char-option\" data-category=\"privateFemale\" data-value=\"紧致敏感\">紧致敏感</button>\n                                <button class=\"option-button select-char-option\" data-category=\"privateFemale\" data-value=\"花唇肥厚\">花唇肥厚</button>\n                                <button class=\"option-button select-char-option\" data-category=\"privateFemale\" data-value=\"阴蒂突出\">阴蒂突出</button>\n                                <button class=\"option-button select-char-option\" data-category=\"privateFemale\" data-value=\"处女\">处女</button>\n                                <button class=\"option-button select-char-option\" data-category=\"privateFemale\" data-value=\"自定义\">自定义</button>\n                            </div>\n                        </div>\n                        <div class=\"feature-group male\">\n                            <div class=\"feature-title\">♂ 阳具特征</div>\n                            <div class=\"options-group radio-group\" id=\"malePrivateOptions\">\n                                <button class=\"option-button select-char-option\" data-category=\"privateMale\" data-value=\"粗大\">粗大</button>\n                                <button class=\"option-button select-char-option\" data-category=\"privateMale\" data-value=\"标准\">标准</button>\n                                <button class=\"option-button select-char-option\" data-category=\"privateMale\" data-value=\"短小\">短小</button>\n                                <button class=\"option-button select-char-option\" data-category=\"privateMale\" data-value=\"自定义\">自定义</button>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"form-group\">\n                        <label>职 业</label>\n                        <div class=\"options-group radio-group\" id=\"occupationOptions\">\n                            <button class=\"option-button select-char-option\" data-category=\"occupation\" data-value=\"学生\">学生</button>\n                            <button class=\"option-button select-char-option\" data-category=\"occupation\" data-value=\"白领\">白领</button>\n                            <button class=\"option-button select-char-option\" data-category=\"occupation\" data-value=\"教师\">教师</button>\n                            <button class=\"option-button select-char-option\" data-category=\"occupation\" data-value=\"护士\">护士</button>\n                            <button class=\"option-button select-char-option\" data-category=\"occupation\" data-value=\"模特\">模特</button>\n                            <button class=\"option-button select-char-option\" data-category=\"occupation\" data-value=\"家庭主妇\">家庭主妇</button>\n                            <button class=\"option-button select-char-option\" data-category=\"occupation\" data-value=\"自定义\">自定义</button>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"section-title\">03 · 开 场 白 预 览</div>\n                <div class=\"content-card\">\n                    <textarea id=\"openingLinePreview\" rows=\"8\" readonly placeholder=\"您的角色信息和开场白将在这里生成...\" class=\"preview-textarea\"></textarea>\n                </div>\n\n                <div class=\"action-buttons-group\">\n                    <button id=\"randomizeCharacter\" class=\"action-button primary\">随机生成角色</button>\n                    <button id=\"previewOpening\" class=\"action-button secondary\">预览开场白</button>\n                    <button id=\"copyCharacterInfo\" class=\"action-button tertiary\">复制角色信息</button>\n                    <span id=\"copyFeedback\" class=\"copy-feedback\">已复制！</span>\n                </div>\n            </section>\n\n        </div> <!-- end content-wrapper -->\n\n        <footer class=\"page-footer\">\n            <div class=\"divider\"></div>\n            <p>感谢你涉足这片禁忌之地。</p>\n        </footer>\n\n    </div> <!-- end main-container -->\n\n    <script src=\"script.js\"></script>\n</body>\n</html>\n\n\n\n\n/* 通用样式与重置 */\nbody {\n    margin: 0;\n    padding: 0;\n    font-family: 'Times New Roman', Times, serif; /* 保持serif */\n    background: linear-gradient(135deg, #1a0a0a 0%, #2d1215 50%, #1a0a0a 100%);\n    color: #e8d5b0;\n    line-height: 1.6;\n    min-height: 100vh;\n    display: flex;\n    justify-content: center;\n    align-items: flex-start; /* 内容从顶部开始 */\n    overflow-x: hidden; /* 防止横向滚动 */\n    position: relative;\n    transition: background-color 0.5s ease, color 0.5s ease;\n}\n\n/* 昼夜模式 */\nbody.night-mode {\n    background: linear-gradient(135deg, #1a0a0a 0%, #2d1215 50%, #1a0a0a 100%);\n    color: #e8d5b0;\n}\n\nbody.day-mode {\n    background: linear-gradient(135deg, #e0e0e0 0%, #f0f0f0 50%, #e0e0e0 100%);\n    color: #333;\n}\n\nbody.day-mode .page-header .title-main,\nbody.day-mode .section-title,\nbody.day-mode .card-subtitle,\nbody.day-mode label {\n    color: #555;\n}\n\nbody.day-mode .page-header .title-sub,\nbody.day-mode .section-description,\nbody.day-mode .page-footer p,\nbody.day-mode .content-card .card-description {\n    color: #777;\n}\n\nbody.day-mode .content-card,\nbody.day-mode input,\nbody.day-mode textarea {\n    background: rgba(255, 255, 255, 0.7);\n    border-color: rgba(150, 150, 150, 0.4);\n    color: #333;\n}\n\nbody.day-mode .option-button,\nbody.day-mode .tab-button {\n    background: rgba(200, 200, 200, 0.7);\n    border-color: rgba(150, 150, 150, 0.5);\n    color: #555;\n}\n\nbody.day-mode .option-button.selected,\nbody.day-mode .option-button:hover,\nbody.day-mode .tab-button.active,\nbody.day-mode .tab-button:hover {\n    background: rgba(180, 180, 180, 0.8);\n    border-color: rgba(100, 100, 100, 0.7);\n    color: #333;\n}\n\nbody.day-mode .action-button.primary {\n    background: #6c757d;\n    border-color: #5a6268;\n    color: #fff;\n}\nbody.day-mode .action-button.primary:hover {\n    background: #5a6268;\n}\n\nbody.day-mode .action-button.secondary {\n    background: #007bff;\n    border-color: #0069d9;\n    color: #fff;\n}\nbody.day-mode .action-button.secondary:hover {\n    background: #0069d9;\n}\n\nbody.day-mode .action-button.tertiary {\n    background: #28a745;\n    border-color: #218838;\n    color: #fff;\n}\nbody.day-mode .action-button.tertiary:hover {\n    background: #218838;\n}\n\nbody.day-mode .feature-group.female {\n    background: rgba(255, 200, 200, 0.5);\n    border-color: rgba(255, 150, 150, 0.6);\n}\nbody.day-mode .feature-group.male {\n    background: rgba(200, 220, 255, 0.5);\n    border-color: rgba(150, 180, 255, 0.6);\n}\nbody.day-mode .feature-group .feature-title {\n    color: #888;\n}\n\n\n/* 全局容器 */\n.main-container {\n    width: 90%;\n    max-width: 760px;\n    border: 1px solid #8b6914;\n    border-radius: 16px;\n    padding: 28px 24px;\n    margin: 40px 0; /* 留出空间给漂浮物和顶部 */\n    position: relative;\n    z-index: 10; /* 确保内容在漂浮物之上 */\n    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.6);\n    background: rgba(0, 0, 0, 0.4); /* 透明背景以便看到漂浮物 */\n    transition: background-color 0.5s ease, border-color 0.5s ease;\n}\nbody.day-mode .main-container {\n    background: rgba(255, 255, 255, 0.8);\n    border-color: #ccc;\n    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);\n}\n\n/* 头部样式 */\n.page-header {\n    text-align: center;\n    margin-bottom: 24px;\n}\n.page-header .title-main {\n    font-size: 2.2em; /* 26px */\n    font-weight: bold;\n    color: #f0e0c0;\n    letter-spacing: 8px;\n    text-shadow: 0 0 8px rgba(139,105,20,0.6);\n}\n.page-header .title-sub {\n    font-size: 0.9em; /* 11px */\n    color: #8b7355;\n    letter-spacing: 4px;\n    margin-top: 6px;\n}\n.page-header .divider,\n.page-footer .divider {\n    width: 70%;\n    height: 1px;\n    background: linear-gradient(90deg, transparent, #8b6914, transparent);\n    margin: 14px auto;\n}\nbody.day-mode .page-header .divider,\nbody.day-mode .page-footer .divider {\n    background: linear-gradient(90deg, transparent, #aaa, transparent);\n}\n\n/* 标签导航 */\n.tab-navigation {\n    display: flex;\n    justify-content: center;\n    margin-bottom: 24px;\n    flex-wrap: wrap; /* 移动端适配 */\n}\n.tab-navigation .tab-button {\n    background: rgba(139, 105, 20, 0.1);\n    border: 1px solid rgba(139, 105, 20, 0.3);\n    border-radius: 8px;\n    padding: 10px 20px;\n    margin: 4px;\n    color: #c0a878;\n    font-size: 14px;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    flex-grow: 1; /* 移动端自适应宽度 */\n    max-width: 150px; /* 限制按钮最大宽度 */\n}\n.tab-navigation .tab-button:hover {\n    background: rgba(139, 105, 20, 0.3);\n    border-color: #d4a843;\n    color: #f0e0c0;\n    box-shadow: 0 0 8px rgba(139,105,20,0.4);\n}\n.tab-navigation .tab-button.active {\n    background: rgba(139, 32, 48, 0.4);\n    border: 1px solid #8b2030;\n    color: #e8a0a0;\n    box-shadow: 0 0 10px rgba(139, 32, 48, 0.6);\n    pointer-events: none; /* 激活状态不可点击 */\n}\n\n/* 内容区域 */\n.content-wrapper {\n    position: relative; /* 确保tab内容定位 */\n    min-height: 400px; /* 防止内容过少时塌陷 */\n}\n.tab-content {\n    display: none;\n    padding: 0;\n    opacity: 0;\n    transition: opacity 0.5s ease-in-out;\n}\n.tab-content.active {\n    display: block;\n    opacity: 1;\n}\n\n.section-title {\n    text-align: center;\n    margin-bottom: 16px;\n    display: inline-block;\n    background: rgba(139,32,48,0.4);\n    border: 1px solid #8b2030;\n    border-radius: 6px;\n    padding: 4px 16px;\n    color: #e8a0a0;\n    letter-spacing: 3px;\n    font-size: 14px;\n    box-shadow: 0 2px 8px rgba(139,32,48,0.3);\n    margin: 0 auto 16px auto; /* 居中 */\n    display: block; /* 允许 margin auto */\n    width: fit-content; /* 适应内容宽度 */\n}\n\n.section-description {\n    color: #8b7355;\n    font-size: 0.9em;\n    margin-top: -8px;\n    margin-bottom: 16px;\n    text-align: center;\n}\nbody.day-mode .section-title {\n    background: rgba(150, 150, 150, 0.4);\n    border-color: #999;\n    color: #555;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n}\n\n.content-card {\n    background: rgba(139,105,20,0.08);\n    border: 1px solid rgba(139,105,20,0.25);\n    border-radius: 12px;\n    padding: 16px;\n    margin-bottom: 16px;\n    box-shadow: inset 0 0 10px rgba(139,105,20,0.1);\n    transition: background-color 0.5s ease, border-color 0.5s ease;\n}\nbody.day-mode .content-card {\n    background: rgba(255, 255, 255, 0.7);\n    border-color: rgba(150, 150, 150, 0.4);\n    box-shadow: inset 0 0 10px rgba(0,0,0,0.05);\n}\n\n.card-subtitle {\n    color: #d4a843;\n    font-size: 1.1em;\n    font-weight: bold;\n    margin-bottom: 10px;\n}\n.card-description {\n    color: #a89878;\n    font-size: 0.9em;\n    margin-bottom: 10px;\n}\n\n.options-group {\n    display: flex;\n    gap: 8px;\n    flex-wrap: wrap;\n    margin-top: 10px;\n}\n.option-button {\n    background: rgba(139,105,20,0.15);\n    border: 1px solid rgba(139,105,20,0.4);\n    color: #c0a878;\n    padding: 6px 16px;\n    border-radius: 20px;\n    font-size: 0.9em;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    white-space: nowrap; /* 防止文字换行 */\n}\n.option-button:hover {\n    background: rgba(139,105,20,0.3);\n    border-color: #d4a843;\n    color: #f0e0c0;\n    box-shadow: 0 0 6px rgba(139,105,20,0.6);\n}\n.option-button.selected {\n    background: #8b2030;\n    color: #f0e0c0;\n    border-color: #e8a0a0;\n    box-shadow: 0 0 8px rgba(139,32,48,0.6);\n}\n\n/* 表单组 */\n.form-group {\n    margin-bottom: 16px;\n}\n.form-group label {\n    color: #d4a843;\n    font-size: 1em;\n    margin-bottom: 6px;\n    display: block;\n}\n.form-group input[type=\"text\"],\n.form-group input[type=\"number\"] {\n    width: calc(100% - 28px); /* 减去padding和border */\n    background: rgba(0,0,0,0.3);\n    border: 1px solid rgba(139,105,20,0.3);\n    border-radius: 8px;\n    padding: 10px 14px;\n    color: #e8d5b0;\n    font-size: 1em;\n    box-shadow: inset 0 1px 3px rgba(0,0,0,0.5);\n    transition: all 0.3s ease;\n}\n.form-group input[type=\"text\"]::placeholder,\n.form-group input[type=\"number\"]::placeholder {\n    color: #8b7355;\n}\n.form-group input[type=\"text\"]:focus,\n.form-group input[type=\"number\"]:focus {\n    outline: none;\n    border-color: #d4a843;\n    box-shadow: inset 0 1px 3px rgba(0,0,0,0.5), 0 0 8px rgba(139,105,20,0.6);\n}\nbody.day-mode .form-group input[type=\"text\"],\nbody.day-mode .form-group input[type=\"number\"] {\n    background: rgba(255, 255, 255, 0.7);\n    border-color: rgba(150, 150, 150, 0.4);\n    color: #333;\n}\nbody.day-mode .form-group input[type=\"text\"]::placeholder,\nbody.day-mode .form-group input[type=\"number\"]::placeholder {\n    color: #999;\n}\n\n\n/* 私密特征组 */\n.feature-group {\n    border-radius: 8px;\n    padding: 12px;\n    margin-bottom: 8px;\n}\n.feature-group.female {\n    background: rgba(139,32,48,0.15);\n    border: 1px solid rgba(139,32,48,0.3);\n}\n.feature-group.male {\n    background: rgba(60,80,120,0.15);\n    border: 1px solid rgba(60,80,120,0.3);\n}\n.feature-group .feature-title {\n    color: #e8a0a0; /* 默认女性红色 */\n    font-size: 0.9em;\n    margin-bottom: 6px;\n}\n.feature-group.male .feature-title {\n    color: #a0b8d0; /* 男性蓝色 */\n}\n\n/* 预览文本区 */\n.preview-textarea {\n    width: calc(100% - 30px);\n    background: rgba(0,0,0,0.3);\n    border: 1px solid rgba(139,105,20,0.3);\n    border-radius: 8px;\n    padding: 14px;\n    color: #e8d5b0;\n    font-size: 1em;\n    resize: vertical;\n    min-height: 120px;\n    box-shadow: inset 0 1px 3px rgba(0,0,0,0.5);\n    transition: all 0.3s ease;\n}\nbody.day-mode .preview-textarea {\n    background: rgba(255, 255, 255, 0.7);\n    border-color: rgba(150, 150, 150, 0.4);\n    color: #333;\n}\n\n/* 动作按钮组 */\n.action-buttons-group {\n    display: flex;\n    justify-content: center;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-top: 24px;\n}\n.action-button {\n    padding: 12px 24px;\n    border-radius: 25px;\n    font-size: 1em;\n    font-weight: bold;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    box-shadow: 0 4px 10px rgba(0,0,0,0.3);\n    border: none;\n    white-space: nowrap; /* 防止按钮文字换行 */\n}\n.action-button.primary {\n    background: #8b2030;\n    color: #f0e0c0;\n    border: 1px solid #e8a0a0;\n}\n.action-button.primary:hover {\n    background: #a03040;\n    box-shadow: 0 6px 15px rgba(139,32,48,0.5);\n}\n.action-button.secondary {\n    background: #d4a843;\n    color: #1a0a0a;\n    border: 1px solid #f0e0c0;\n}\n.action-button.secondary:hover {\n    background: #e0b853;\n    box-shadow: 0 6px 15px rgba(139,105,20,0.5);\n}\n.action-button.tertiary {\n    background: #555; /* 复制按钮颜色稍低调 */\n    color: #f0e0c0;\n    border: 1px solid #999;\n}\n.action-button.tertiary:hover {\n    background: #666;\n    box-shadow: 0 6px 15px rgba(0,0,0,0.4);\n}\n\n/* 复制反馈 */\n.copy-feedback {\n    background: #28a745;\n    color: #fff;\n    padding: 6px 12px;\n    border-radius: 5px;\n    font-size: 0.9em;\n    opacity: 0;\n    transform: translateY(10px);\n    transition: opacity 0.3s ease, transform 0.3s ease;\n    position: absolute;\n    bottom: -40px; /* 定位在按钮组下方 */\n    left: 50%;\n    transform: translateX(-50%) translateY(10px);\n    white-space: nowrap;\n    pointer-events: none; /* 防止遮挡点击 */\n}\n.copy-feedback.show {\n    opacity: 1;\n    transform: translateX(-50%) translateY(0);\n}\n\n/* 页脚 */\n.page-footer {\n    text-align: center;\n    margin-top: 30px;\n    color: #8b7355;\n    font-size: 0.9em;\n}\n\n/* 昼夜模式切换按钮 */\n.theme-toggle {\n    position: absolute;\n    top: 20px;\n    right: 20px;\n    background: rgba(255, 255, 255, 0.2);\n    border: 1px solid rgba(255, 255, 255, 0.4);\n    border-radius: 50%;\n    width: 40px;\n    height: 40px;\n    font-size: 1.2em;\n    cursor: pointer;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    transition: all 0.3s ease;\n    z-index: 100;\n}\n.theme-toggle:hover {\n    background: rgba(255, 255, 255, 0.4);\n    border-color: rgba(255, 255, 255, 0.6);\n    box-shadow: 0 0 10px rgba(255, 255, 255, 0.6);\n}\nbody.day-mode .theme-toggle {\n    background: rgba(0, 0, 0, 0.2);\n    border-color: rgba(0, 0, 0, 0.4);\n}\nbody.day-mode .theme-toggle:hover {\n    background: rgba(0, 0, 0, 0.4);\n    border-color: rgba(0, 0, 0, 0.6);\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.6);\n}\n\n/* ================== 开场动画 ================== */\n.intro-animation {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(135deg, #0a0a0a 0%, #1c0c0e 50%, #0a0a0a 100%);\n    color: #e8d5b0;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-direction: column;\n    z-index: 9999;\n    opacity: 1;\n    visibility: visible;\n    transition: opacity 1s ease-out, visibility 1s ease-out;\n}\n.intro-animation.hidden {\n    opacity: 0;\n    visibility: hidden;\n}\n.intro-content {\n    text-align: center;\n    animation: fadeInScale 2s ease-out forwards;\n}\n.intro-content h1 {\n    font-size: 3em;\n    letter-spacing: 10px;\n    margin-bottom: 20px;\n    color: #f0e0c0;\n    text-shadow: 0 0 15px rgba(139,105,20,0.8);\n}\n.intro-content p {\n    font-size: 1.2em;\n    margin-bottom: 40px;\n    color: #a89878;\n}\n.intro-animation #skipIntro {\n    background: #8b2030;\n    color: #f0e0c0;\n    border: 1px solid #e8a0a0;\n    padding: 12px 30px;\n    border-radius: 30px;\n    font-size: 1.1em;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    opacity: 0;\n    animation: fadeIn 1s ease-out 1.5s forwards; /* 延迟出现 */\n}\n.intro-animation #skipIntro:hover {\n    background: #a03040;\n    box-shadow: 0 0 15px rgba(139,32,48,0.7);\n}\n\n@keyframes fadeInScale {\n    0% { opacity: 0; transform: scale(0.9); }\n    100% { opacity: 1; transform: scale(1); }\n}\n@keyframes fadeIn {\n    0% { opacity: 0; }\n    100% { opacity: 1; }\n}\n\n\n/* ================== 全局动态漂浮物 (不遮挡内容) ================== */\n.global-floating-elements {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    pointer-events: none; /* 确保不阻挡鼠标事件 */\n    overflow: hidden;\n    z-index: 1; /* 在内容下方 */\n}\n\n/* 漂浮物基础样式 */\n.global-floating-elements::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\"><circle cx=\"5\" cy=\"5\" r=\"2\" fill=\"rgba(212,168,67,0.1)\"/></svg>'), url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\"><path d=\"M7.5 0 L15 15 L0 15 Z\" fill=\"rgba(139,32,48,0.08)\"/></svg>'); /* 小型圆形和三角形 */\n    background-repeat: repeat;\n    background-size: 200px 200px, 300px 300px;\n    animation: floatEffect 60s linear infinite;\n    filter: blur(1px); /* 模糊效果 */\n    opacity: 0.8;\n}\nbody.day-mode .global-floating-elements::before {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\"><circle cx=\"5\" cy=\"5\" r=\"2\" fill=\"rgba(0,0,0,0.05)\"/></svg>'), url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\"><path d=\"M7.5 0 L15 15 L0 15 Z\" fill=\"rgba(0,0,0,0.03)\"/></svg>');\n}\n\n@keyframes floatEffect {\n    0% { background-position: 0 0, 0 0; }\n    100% { background-position: 1000px 1000px, -1000px -1000px; } /* 更长的位移 */\n}\n\n\n/* ================== 天气背景 ================== */\n.weather-overlay {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    pointer-events: none;\n    z-index: 5; /* 在漂浮物之上，内容之下 */\n    opacity: 0.7;\n    transition: opacity 1s ease;\n}\n\n/* 雨滴效果 */\n.weather-overlay.rain-effect {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAAXNSR0IArs4c6QAAAHBJREFUGFdjYPj/P38GIAuI+FhAYuAEPxMDBxAzMgEw/P/PwMDw/P8bGP7/MTAwMDD8/xkwGPw/MPj//19AAsDg//9wYGBgYOB+YGD4/wGBoKiooJGBgYGBAQMDw/M/BgZGBobGMzCwMDAwAAD6S4hZkC0Q4AAAAABJRU5ErkJggg=='); /* 小雨滴 */\n    background-size: 10px 10px; /* 调整雨滴大小 */\n    animation: rain 0.8s linear infinite;\n}\n@keyframes rain {\n    0% { background-position: 0 0; }\n    100% { background-position: 20px 100px; } /* 控制雨滴方向和速度 */\n}\n\n/* 雪花效果 */\n.weather-overlay.snow-effect {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0AdFcPfgAAAAYSURBVBhXY/h/PwMIAAUwAAJ/QnQfAAAAAElFTkSuQmCC'); /* 白色小点代表雪花 */\n    background-size: 15px 15px;\n    animation: snow 10s linear infinite;\n}\n@keyframes snow {\n    0% { background-position: 0 0; }\n    100% { background-position: 50px 500px; }\n}\n\n/* 星空效果 (夜间模式默认) */\n.weather-overlay.star-effect {\n    background: transparent; /* 确保不覆盖夜间背景 */\n}\n.weather-overlay.star-effect::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background-image: radial-gradient(circle at 10% 20%, rgba(255,255,255,0.8) 1px, transparent 1px),\n                      radial-gradient(circle at 30% 60%, rgba(255,255,255,0.7) 0.8px, transparent 0.8px),\n                      radial-gradient(circle at 70% 40%, rgba(255,255,255,0.9) 1.2px, transparent 1.2px),\n                      radial-gradient(circle at 90% 80%, rgba(255,255,255,0.6) 0.9px, transparent 0.9px);\n    background-size: 200px 200px; /* 更细密的星点 */\n    animation: twinkle 20s linear infinite;\n    opacity: 0.8;\n}\n\n@keyframes twinkle {\n    0% { background-position: 0 0; }\n    100% { background-position: 500px 500px; }\n}\n\n/* 晴天 (无特殊效果，或轻微光晕) */\n.weather-overlay.clear-effect {\n    background-image: none;\n    opacity: 0.3;\n    /* 可以添加一个轻微的，缓慢的颜色渐变或光晕动画 */\n    /* background: radial-gradient(circle at 50% 20%, rgba(255,255,200,0.1) 0%, transparent 50%);\n    animation: subtleGlow 30s ease-in-out infinite alternate; */\n}\n/* @keyframes subtleGlow {\n    0% { opacity: 0.2; }\n    100% { opacity: 0.4; }\n} */\n\n\n/* ================== 媒体查询 (响应式) ================== */\n@media (max-width: 768px) {\n    .main-container {\n        width: 95%;\n        padding: 20px 15px;\n        margin: 20px 0;\n    }\n    .page-header .title-main {\n        font-size: 1.8em;\n        letter-spacing: 5px;\n    }\n    .page-header .title-sub {\n        font-size: 0.8em;\n        letter-spacing: 3px;\n    }\n    .tab-navigation {\n        flex-direction: column; /* 垂直排列 */\n        align-items: stretch;\n    }\n    .tab-navigation .tab-button {\n        max-width: none; /* 填满宽度 */\n        margin: 4px 0;\n    }\n    .action-buttons-group {\n        flex-direction: column;\n        gap: 10px;\n    }\n    .action-button {\n        width: 100%;\n        box-sizing: border-box; /* 包含padding和border */\n    }\n    .intro-content h1 {\n        font-size: 2em;\n        letter-spacing: 5px;\n    }\n    .intro-content p {\n        font-size: 1em;\n    }\n    .theme-toggle {\n        top: 10px;\n        right: 10px;\n        width: 35px;\n        height: 35px;\n        font-size: 1em;\n    }\n}\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n    // --- 0. 可跳过的开场动画 ---\n    const introAnimation = document.getElementById('introAnimation');\n    const skipIntroButton = document.getElementById('skipIntro');\n\n    skipIntroButton.addEventListener('click', () => {\n        introAnimation.classList.add('hidden');\n        // 动画结束后移除元素，释放资源\n        introAnimation.addEventListener('transitionend', () => {\n            introAnimation.remove();\n        }, { once: true });\n    });\n\n    // 假设开场动画在2秒后自动隐藏（如果用户不跳过）\n    // 或者你可以选择只让用户手动跳过\n    setTimeout(() => {\n        if (!introAnimation.classList.contains('hidden')) {\n             introAnimation.classList.add('hidden');\n             introAnimation.addEventListener('transitionend', () => {\n                introAnimation.remove();\n            }, { once: true });\n        }\n    }, 3000); // 3秒后自动隐藏，给用户一点时间看内容\n\n    // --- 1. 标签切换功能 ---\n    const tabButtons = document.querySelectorAll('.tab-navigation .tab-button');\n    const tabContents = document.querySelectorAll('.tab-content');\n\n    tabButtons.forEach(button => {\n        button.addEventListener('click', () => {\n            // 移除所有按钮的 active 状态\n            tabButtons.forEach(btn => btn.classList.remove('active'));\n            // 隐藏所有内容\n            tabContents.forEach(content => content.classList.remove('active'));\n\n            // 激活当前点击的按钮\n            button.classList.add('active');\n            // 显示对应的内容\n            const targetTab = button.dataset.tab;\n            document.getElementById(targetTab).classList.add('active');\n        });\n    });\n\n    // 默认激活第一个标签\n    if (tabButtons.length > 0) {\n        tabButtons[0].click();\n    }\n\n\n    // --- 2. 角色信息表单选择 (单选逻辑) ---\n    const selectCharOptions = document.querySelectorAll('.select-char-option');\n\n    selectCharOptions.forEach(button => {\n        button.addEventListener('click', () => {\n            const category = button.dataset.category;\n            const parentGroup = button.closest('.options-group');\n\n            // 移除同类别中其他按钮的 selected 状态\n            if (parentGroup) {\n                parentGroup.querySelectorAll(`.select-char-option[data-category=\"${category}\"]`).forEach(btn => {\n                    btn.classList.remove('selected');\n                });\n            }\n            // 激活当前按钮\n            button.classList.add('selected');\n        });\n    });\n\n\n    // --- 3. 随机角色信息 和 开场白生成 ---\n    const charNameInput = document.getElementById('charName');\n    const charAgeInput = document.getElementById('charAge');\n    const randomizeCharacterButton = document.getElementById('randomizeCharacter');\n    const previewOpeningButton = document.getElementById('previewOpening');\n    const openingLinePreview = document.getElementById('openingLinePreview');\n\n    const randomNames = [\"莉莉娅\", \"艾米丽\", \"安娜\", \"林语\", \"张伟\", \"李明\", \"约翰\", \"玛丽\"];\n    const randomAges = Array.from({length: 30}, (_, i) => i + 18); // 18-47岁\n    const randomBodyShapes = [\"娇小纤细\", \"匀称标准\", \"丰满圆润\", \"高挑健美\"];\n    const randomFemalePrivate = [\"紧致敏感\", \"花唇肥厚\", \"阴蒂突出\", \"处女\"];\n    const randomMalePrivate = [\"粗大\", \"标准\", \"短小\"];\n    const randomOccupations = [\"学生\", \"白领\", \"教师\", \"护士\", \"模特\", \"家庭主妇\", \"程序员\", \"艺术家\"];\n\n    function getRandomItem(arr) {\n        return arr[Math.floor(Math.random() * arr.length)];\n    }\n\n    function generateRandomCharacter() {\n        // 清空输入框\n        charNameInput.value = '';\n        charAgeInput.value = '';\n\n        // 随机选择各项，并模拟点击以激活样式\n        const randomBody = getRandomItem(randomBodyShapes);\n        selectOptionAndClick('bodyShape', randomBody);\n\n        // 随机选择性别及私密特征\n        const isFemale = Math.random() > 0.5;\n        if (isFemale) {\n            selectOptionAndClick('privateFemale', getRandomItem(randomFemalePrivate));\n            // 隐藏男性特征，显示女性特征\n            document.querySelector('.feature-group.male').style.display = 'none';\n            document.querySelector('.feature-group.female').style.display = 'block';\n        } else {\n            selectOptionAndClick('privateMale', getRandomItem(randomMalePrivate));\n            // 隐藏女性特征，显示男性特征\n            document.querySelector('.feature-group.female').style.display = 'none';\n            document.querySelector('.feature-group.male').style.display = 'block';\n        }\n\n        const randomOcc = getRandomItem(randomOccupations);\n        selectOptionAndClick('occupation', randomOcc);\n    }\n\n    // 辅助函数，用于模拟点击并设置选中状态\n    function selectOptionAndClick(category, value) {\n        const button = document.querySelector(`.select-char-option[data-category=\"${category}\"][data-value=\"${value}\"]`);\n        if (button) {\n            // 确保先清除同类别的选中状态\n            const parentGroup = button.closest('.options-group');\n            if (parentGroup) {\n                parentGroup.querySelectorAll(`.select-char-option[data-category=\"${category}\"]`).forEach(btn => {\n                    btn.classList.remove('selected');\n                });\n            }\n            button.classList.add('selected');\n        }\n    }\n\n\n    randomizeCharacterButton.addEventListener('click', generateRandomCharacter);\n\n    // 首次加载时自动生成一次，提供默认状态\n    generateRandomCharacter();\n\n    // 随机生成器（Roll天赋六选一） - 简化为随机分配特质\n    // 由于天赋系统未在HTML中体现，这里用角色特质代替\n    const randomTraits = [\n        \"极度敏感\", \"意志坚定\", \"好奇心重\", \"胆小懦弱\", \"渴望被征服\", \"反抗精神强烈\",\n        \"天真无邪\", \"阅历丰富\", \"身体柔韧\", \"痛感迟钝\", \"易于顺从\", \"心思缜密\"\n    ];\n\n    function generateOpeningLine() {\n        const name = charNameInput.value || getRandomItem(randomNames);\n        const age = charAgeInput.value || getRandomItem(randomAges);\n        const bodyShape = document.querySelector('.select-char-option[data-category=\"bodyShape\"].selected')?.dataset.value || getRandomItem(randomBodyShapes);\n        const occupation = document.querySelector('.select-char-option[data-category=\"occupation\"].selected')?.dataset.value || getRandomItem(randomOccupations);\n\n        let privateFeature = '';\n        const femalePrivateSelected = document.querySelector('.select-char-option[data-category=\"privateFemale\"].selected');\n        const malePrivateSelected = document.querySelector('.select-char-option[data-category=\"privateMale\"].selected');\n\n        if (femalePrivateSelected && femalePrivateSelected.offsetParent !== null) { // offsetParent !== null 检查是否可见\n            privateFeature = femalePrivateSelected.dataset.value;\n        } else if (malePrivateSelected && malePrivateSelected.offsetParent !== null) {\n            privateFeature = malePrivateSelected.dataset.value;\n        } else { // 如果都没有可见的选中项，则随机一个\n            if (Math.random() > 0.5) {\n                 privateFeature = getRandomItem(randomFemalePrivate);\n            } else {\n                 privateFeature = getRandomItem(randomMalePrivate);\n            }\n        }\n\n        // 随机选择6个特质中的一个作为主要特质\n        const primaryTrait = getRandomItem(randomTraits);\n\n        const opening = `\n角色姓名：${name}\n角色年龄：${age}\n身材特征：${bodyShape}\n私密特征：${privateFeature}\n职业身份：${occupation}\n核心特质：${primaryTrait}\n\n开场白：\n“我叫${name}，今年${age}岁，曾是一名${occupation}。我从未想过自己会与‘虐阴协会’产生任何交集。直到那一天，当${privateFeature}的我在灯红酒绿中被盯上，我的${bodyShape}身体，便被卷入了一场无法逃脱的命运漩涡。我的内心充满了${primaryTrait}的矛盾，但这里，似乎没有人能听到我的呼救……”\n        `;\n        openingLinePreview.value = opening.trim();\n    }\n\n    previewOpeningButton.addEventListener('click', generateOpeningLine);\n\n\n    // --- 4. 复制角色信息按钮 ---\n    const copyCharacterInfoButton = document.getElementById('copyCharacterInfo');\n    const copyFeedback = document.getElementById('copyFeedback');\n\n    copyCharacterInfoButton.addEventListener('click', async () => {\n        if (openingLinePreview.value) {\n            try {\n                await navigator.clipboard.writeText(openingLinePreview.value);\n                copyFeedback.classList.add('show');\n                setTimeout(() => {\n                    copyFeedback.classList.remove('show');\n                }, 1500);\n            } catch (err) {\n                alert('复制失败，请手动复制: ' + err);\n            }\n        } else {\n            alert('请先生成角色信息和开场白！');\n        }\n    });\n\n\n    // --- 5. 动态变化的天气背景 (雨、雪、晴、星空) ---\n    const weatherOverlay = document.querySelector('.weather-overlay');\n    const weatherEffects = ['rain-effect', 'snow-effect', 'clear-effect', 'star-effect']; // star-effect只在夜间模式有视觉效果\n\n    function changeWeather() {\n        // 清除所有天气效果\n        weatherEffects.forEach(effect => weatherOverlay.classList.remove(effect));\n\n        // 随机选择一种天气\n        const randomEffect = getRandomItem(weatherEffects);\n        weatherOverlay.classList.add(randomEffect);\n\n        // 如果是晴天，可以稍微调低透明度，让背景更明显\n        if (randomEffect === 'clear-effect') {\n            weatherOverlay.style.opacity = '0.1';\n        } else {\n            weatherOverlay.style.opacity = '0.7';\n        }\n\n        // 星空效果只在夜间模式有意义\n        if (randomEffect === 'star-effect' && document.body.classList.contains('day-mode')) {\n            weatherOverlay.classList.remove('star-effect'); // 移除星空效果\n            weatherOverlay.classList.add('clear-effect'); // 切换到晴天效果\n            weatherOverlay.style.opacity = '0.1';\n        }\n    }\n\n    // 每隔一段时间切换天气\n    setInterval(changeWeather, 20000); // 每20秒切换一次天气\n    changeWeather(); // 页面加载时立即设置一次天气\n\n\n    // --- 6. 昼夜模式主题切换 ---\n    const themeToggle = document.getElementById('themeToggle');\n\n    themeToggle.addEventListener('click', () => {\n        document.body.classList.toggle('day-mode');\n        document.body.classList.toggle('night-mode');\n\n        const isDayMode = document.body.classList.contains('day-mode');\n        themeToggle.textContent = isDayMode ? '🌙' : '☀️';\n\n        // 切换模式时，重新应用天气效果，确保星空/晴天等逻辑正确\n        changeWeather();\n    });\n\n    // 初始设置昼夜模式按钮文本\n    themeToggle.textContent = document.body.classList.contains('day-mode') ? '🌙' : '☀️';\n\n\n    // --- 路线选择点击事件，用于跳转到角色配置页 ---\n    const routeOptions = document.querySelectorAll('.route-option');\n    routeOptions.forEach(option => {\n        option.addEventListener('click', () => {\n            // 首先取消所有路线的选中状态\n            routeOptions.forEach(btn => btn.classList.remove('selected'));\n            // 选中当前点击的路线\n            option.classList.add('se\n\n","options":{"items":[{"order":0,"label":"🅰️ A1扮演紫竹铃","type":"SET-INPUT","value":"我选择A1。我要扮演紫竹铃（林竹），从收到那条消息的夜晚开始。"},{"order":1,"label":"🅰️ A2 自建受虐者","type":"SET-INPUT","value":"我选择A2。我想创建自己的角色作为协会的新目标。请引导我创建角色。"},{"order":2,"label":"第一人称","type":"SET-INPUT","value":"【用户是第一人称】"},{"order":3,"label":"第二人称","type":"SET-INPUT","value":"【用户是第二人称】"}]},"language":"zh","containsNSFW":true,"publicAccess":true,"deletedAt":null,"isAnonymous":false,"enableSafeguard":true,"defaultModelSettings":null,"totalConversations":16,"totalMessages":59,"totalCreditsUsed":27835,"totalTokensUsed":1311574,"totalPlayedUsers":11,"deeplyPlayed":2,"fixedPromptLength":25483,"lorebookLength":27914,"author":{"id":"WINJwQyWV44Lw9Cvqoeox6AugLmKG6iq","name":"醉影悠梦","displayUsername":"806549256","username":"806549256"},"cardsTags":[{"tag":{"name":"超高自由度","cardsCount":1119}},{"tag":{"name":"已破甲","cardsCount":2461}},{"tag":{"name":"全性向","cardsCount":301}},{"tag":{"name":"可剧情可涩涩","cardsCount":2826}},{"tag":{"name":"调教","cardsCount":1142}},{"tag":{"name":"开局即可色","cardsCount":1651}}],"cardsVoices":[],"prompt":null,"promptSizeBytes":null}