diff --git a/README.md b/README.md
index e45f89c..023cafa 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-# LittleWhiteBox
-
-SillyTavern 扩展插件 - 小白X
-
-## 📁 目录结构
-
-```
+# LittleWhiteBox
+
+SillyTavern 扩展插件 - 小白X
+
+## 📁 目录结构
+
+```
LittleWhiteBox/
├── index.js # 主入口,初始化所有模块,管理总开关
├── manifest.json # 插件清单,版本、依赖声明
@@ -78,12 +78,12 @@ LittleWhiteBox/
├── LICENSE.md # 许可证
└── NOTICE # 通知
-```
-
-## 🔄 版本历史
-
-- v2.2.2 - 目录结构重构(2025-12-08)
-
-## 📄 许可证
-
-详见 `docs/LICENSE.md`
+```
+
+## 🔄 版本历史
+
+- v2.2.2 - 目录结构重构(2025-12-08)
+
+## 📄 许可证
+
+详见 `docs/LICENSE.md`
diff --git a/settings.html b/settings.html
index af5686f..f4dfa9a 100644
--- a/settings.html
+++ b/settings.html
@@ -1,6 +1,6 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
任务编辑器
-
-
-
-
-
-
-
-
-
-
-
-
-
- 设为0即只手动激活,非自动执行
-
-
-
-
- 消息会以第0层开始计算层数
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 选择任务执行的时机
-
-
-
-
-
-
-
-
-
☰
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
任务下载
-
- 正在加载云端任务...
-
-
-
-
云端任务由贡献者提供并经过基础审核。由于脚本具有较高权限,使用前请查看源码并检查安全性,确认适配您的场景。
-
-
-
-
+ function setModuleEnabled(key, enabled) {
+ try {
+ if (!extension_settings[EXT_ID][key]) extension_settings[EXT_ID][key] = {};
+ extension_settings[EXT_ID][key].enabled = !!enabled;
+ } catch (e) { }
+ const id = KEY_TO_CHECKBOX[key], el = id ? $id(id) : null;
+ if (el) { el.checked = !!enabled; try { $(el).trigger('change'); } catch (e) { } }
+ }
+ function captureStates() {
+ const out = { modules: {}, sandboxMode: false, useBlob: false, wrapperIframe: false, renderEnabled: true };
+ try { MODULE_KEYS.forEach(k => { out.modules[k] = !!(extension_settings[EXT_ID][k] && extension_settings[EXT_ID][k].enabled); }); } catch (e) { }
+ try { out.sandboxMode = !!extension_settings[EXT_ID].sandboxMode; } catch (e) { }
+ try { out.useBlob = !!extension_settings[EXT_ID].useBlob; } catch (e) { }
+ try { out.wrapperIframe = !!extension_settings[EXT_ID].wrapperIframe; } catch (e) { }
+ try { out.renderEnabled = extension_settings[EXT_ID].renderEnabled !== false; } catch (e) { }
+ return out;
+ }
+ function applyStates(st) {
+ if (!st) return;
+ try { Object.keys(st.modules || {}).forEach(k => setModuleEnabled(k, !!st.modules[k])); } catch (e) { }
+ try {
+ extension_settings[EXT_ID].sandboxMode = !!st.sandboxMode;
+ const el = $id('xiaobaix_sandbox'); if (el) { el.checked = !!st.sandboxMode; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try {
+ extension_settings[EXT_ID].useBlob = !!st.useBlob;
+ const el = $id('xiaobaix_use_blob'); if (el) { el.checked = !!st.useBlob; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try {
+ extension_settings[EXT_ID].wrapperIframe = !!st.wrapperIframe;
+ const el = $id('Wrapperiframe'); if (el) { el.checked = !!st.wrapperIframe; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try {
+ extension_settings[EXT_ID].renderEnabled = st.renderEnabled !== false;
+ const el = $id('xiaobaix_render_enabled'); if (el) { el.checked = st.renderEnabled !== false; if (window.isXiaobaixEnabled) try { $(el).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try { if (window.saveSettingsDebounced) window.saveSettingsDebounced(); } catch (e) { }
+ }
+ function applyResetDefaults() {
+ DEFAULTS_ON.forEach(k => setModuleEnabled(k, true));
+ DEFAULTS_OFF.forEach(k => setModuleEnabled(k, false));
+ try {
+ extension_settings[EXT_ID].sandboxMode = false; const sb = $id(KEY_TO_CHECKBOX.sandboxMode);
+ if (sb) { sb.checked = false; try { $(sb).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try {
+ extension_settings[EXT_ID].useBlob = false; const bl = $id(KEY_TO_CHECKBOX.useBlob);
+ if (bl) { bl.checked = false; try { $(bl).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try {
+ extension_settings[EXT_ID].wrapperIframe = true; const wp = $id(KEY_TO_CHECKBOX.wrapperIframe);
+ if (wp) { wp.checked = true; try { $(wp).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try {
+ extension_settings[EXT_ID].renderEnabled = true; const re = $id(KEY_TO_CHECKBOX.renderEnabled);
+ if (re) { re.checked = true; try { $(re).trigger('change'); } catch (e) { } }
+ } catch (e) { }
+ try { if (window.saveSettingsDebounced) window.saveSettingsDebounced(); } catch (e) { }
+ }
+ function initTaskTabs() {
+ const tabs = Array.from(document.querySelectorAll('.task-tab'));
+ if (!tabs.length) return;
+ const panels = Array.from(document.querySelectorAll('.task-panel'));
+ const showPanel = (id) => {
+ panels.forEach(panel => {
+ panel.style.display = panel.dataset.panel === id ? '' : 'none';
+ });
+ };
+ document.addEventListener('click', function (evt) {
+ const btn = evt.target.closest('.task-tab');
+ if (!btn) return;
+ evt.preventDefault();
+ evt.stopPropagation();
+ if (btn.classList.contains('active')) return;
+ tabs.forEach(t => t.classList.toggle('active', t === btn));
+ showPanel(btn.dataset.target);
+ });
+ const initial = tabs.find(t => t.classList.contains('active')) || tabs[0];
+ if (initial) {
+ showPanel(initial.dataset.target);
+ }
+ }
+ window.XB_captureAndStoreStates = function () { try { extension_settings[EXT_ID].prevModuleStatesV2 = captureStates(); if (window.saveSettingsDebounced) window.saveSettingsDebounced(); } catch (e) { } };
+ window.XB_applyPrevStates = function () { try { const st = extension_settings[EXT_ID].prevModuleStatesV2; if (st) applyStates(st); } catch (e) { } };
+ onReady(() => {
+ setupUpdateButtonHandlers();
+ setupXBtnPositionButton();
+ initTaskTabs();
+ try { $(document).off('click.xbreset', '#xiaobaix_reset_btn').on('click.xbreset', '#xiaobaix_reset_btn', e => { e.preventDefault(); e.stopPropagation(); applyResetDefaults(); }); } catch (e) {
+ const btn = $id('xiaobaix_reset_btn'); if (btn) { btn.addEventListener('click', e => { e.preventDefault(); e.stopPropagation(); applyResetDefaults(); }, { once: false }); }
+ }
+ });
+ }();
+
+
+
+
+
+
+
+
+
任务编辑器
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设为0即只手动激活,非自动执行
+
+
+
+
+ 消息会以第0层开始计算层数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择任务执行的时机
+
+
+
+
+
+
+
+
+
☰
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
任务下载
+
+ 正在加载云端任务...
+
+
+
+
云端任务由贡献者提供并经过基础审核。由于脚本具有较高权限,使用前请查看源码并检查安全性,确认适配您的场景。
+
+
+
+
diff --git a/style.css b/style.css
index 8754b3c..32dff62 100644
--- a/style.css
+++ b/style.css
@@ -1,471 +1,471 @@
-/* ==================== 基础工具样式 ==================== */
-pre:has(+ .xiaobaix-iframe) {
- display: none;
-}
-
-/* ==================== 循环任务样式 ==================== */
-.task-container {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-
-.task-container:empty::after {
- content: "No tasks found";
- font-size: 0.95em;
- opacity: 0.7;
- display: block;
- text-align: center;
-}
-
-.scheduled-tasks-embedded-warning {
- padding: 15px;
- background: var(--SmartThemeBlurTintColor);
- border: 1px solid var(--SmartThemeBorderColor);
- border-radius: 8px;
- margin: 10px 0;
-}
-
-.warning-note {
- display: flex;
- align-items: center;
- gap: 8px;
- margin-top: 10px;
- padding: 8px;
- background: rgba(255, 193, 7, 0.1);
- border-left: 3px solid #ffc107;
- border-radius: 4px;
-}
-
-.task-item {
- align-items: center;
- border: 1px solid var(--SmartThemeBorderColor);
- border-radius: 10px;
- padding: 0 5px;
- margin-top: 1px;
- margin-bottom: 1px;
-}
-
-.task-item:has(.disable_task:checked) .task_name {
- text-decoration: line-through;
- filter: grayscale(0.5);
-}
-
-.task_name {
- font-weight: normal;
- color: var(--SmartThemeEmColor);
- font-size: 0.9em;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.drag-handle {
- cursor: grab;
- color: var(--SmartThemeQuoteColor);
- margin-right: 8px;
- user-select: none;
-}
-
-.drag-handle:active {
- cursor: grabbing;
-}
-
-.checkbox {
- align-items: center;
-}
-
-.task_editor {
- width: 100%;
-}
-
-.task_editor .flex-container {
- gap: 10px;
-}
-
-.task_editor textarea {
- font-family: 'Courier New', monospace;
-}
-
-input.disable_task {
- display: none !important;
-}
-
-.task-toggle-off {
- cursor: pointer;
- opacity: 0.5;
- filter: grayscale(0.5);
- transition: opacity 0.2s ease-in-out;
-}
-
-.task-toggle-off:hover {
- opacity: 1;
- filter: none;
-}
-
-.task-toggle-on {
- cursor: pointer;
-}
-
-.disable_task:checked~.task-toggle-off {
- display: block;
-}
-
-.disable_task:checked~.task-toggle-on {
- display: none;
-}
-
-.disable_task:not(:checked)~.task-toggle-off {
- display: none;
-}
-
-.disable_task:not(:checked)~.task-toggle-on {
- display: block;
-}
-
-/* ==================== 沉浸式显示模式样式 ==================== */
-body.immersive-mode #chat {
- padding: 0 !important;
- border: 0px !important;
- overflow-y: auto;
- margin: 0 0px 0px 4px !important;
- scrollbar-width: thin;
- scrollbar-gutter: auto;
-}
-
-.xiaobaix-top-group {
- margin-top: 1em !important;
-}
-
-@media screen and (min-width: 1001px) {
- body.immersive-mode #chat {
- scrollbar-width: none;
- -ms-overflow-style: none;
- /* IE and Edge */
- }
-
- body.immersive-mode #chat::-webkit-scrollbar {
- display: none;
- }
-}
-
-body.immersive-mode .mesAvatarWrapper {
- margin-top: 1em;
- padding-bottom: 0px;
-}
-
-body.immersive-mode .swipe_left,
-body.immersive-mode .swipeRightBlock {
- display: none !important;
-}
-
-body.immersive-mode .mes {
- margin: 2% 0 0% 0 !important;
-}
-
-body.immersive-mode .ch_name {
- padding-bottom: 5px;
- border-bottom: 0.5px dashed color-mix(in srgb, var(--SmartThemeEmColor) 30%, transparent);
-}
-
-body.immersive-mode .mes_block {
- padding-left: 0 !important;
- margin: 0 0 5px 0 !important;
-}
-
-body.immersive-mode .mes_text {
- padding: 0px !important;
- max-width: 100%;
- width: 100%;
- margin-top: 5px;
-}
-
-body.immersive-mode .mes {
- width: 99%;
- margin: 0 0.5%;
- padding: 0px !important;
-}
-
-body.immersive-mode .mes_buttons,
-body.immersive-mode .mes_edit_buttons {
- position: absolute !important;
- top: 0 !important;
- right: 0 !important;
-}
-
-body.immersive-mode .mes_buttons {
- height: 20px;
- overflow-x: clip;
-}
-
-body.immersive-mode .swipes-counter {
- padding-left: 0px;
- margin-bottom: 0 !important;
-}
-
-body.immersive-mode .flex-container.flex1.alignitemscenter {
- min-height: 32px;
-}
-
-.immersive-navigation {
- display: flex;
- justify-content: space-between;
- align-items: flex-end;
- margin-top: 5px;
- opacity: 0.7;
-}
-
-.immersive-nav-btn {
- color: var(--SmartThemeBodyColor);
- cursor: pointer;
- transition: all 0.2s ease;
- background: none;
- border: none;
- font-size: 12px;
-}
-
-.immersive-nav-btn:hover:not(:disabled) {
- background-color: rgba(var(--SmartThemeBodyColor), 0.2);
- transform: scale(1.1);
-}
-
-.immersive-nav-btn:disabled {
- opacity: 0.3;
- cursor: not-allowed;
-}
-
-/* ==================== 模板编辑器样式 ==================== */
-.xiaobai_template_editor {
- max-height: 80vh;
- overflow-y: auto;
- padding: 20px;
- border-radius: 8px;
-}
-
-.template-replacer-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 10px;
-}
-
-.template-replacer-title {
- font-weight: bold;
- color: var(--SmartThemeEmColor, #007bff);
-}
-
-.template-replacer-controls {
- display: flex;
- align-items: center;
- gap: 15px;
-}
-
-.template-replacer-status {
- font-size: 12px;
- color: var(--SmartThemeQuoteColor, #888);
- font-style: italic;
-}
-
-.template-replacer-status.has-settings {
- color: var(--SmartThemeEmColor, #007bff);
-}
-
-.template-replacer-status.no-character {
- color: var(--SmartThemeCheckboxBgColor, #666);
-}
-
-/* ==================== 消息预览插件样式 ==================== */
-#message_preview_btn {
- width: var(--bottomFormBlockSize);
- height: var(--bottomFormBlockSize);
- margin: 0;
- border: none;
- cursor: pointer;
- opacity: 0.7;
- display: flex;
- align-items: center;
- justify-content: center;
- transition: opacity 300ms;
- color: var(--SmartThemeBodyColor);
- font-size: var(--bottomFormIconSize);
-}
-
-#message_preview_btn:hover {
- opacity: 1;
- filter: brightness(1.2);
-}
-
-.message-preview-content-box {
- font-family: 'Courier New', 'Monaco', 'Menlo', monospace;
- white-space: pre-wrap;
- max-height: 82vh;
- overflow-y: auto;
- padding: 15px;
- background: #000000 !important;
- border: 1px solid var(--SmartThemeBorderColor);
- border-radius: 5px;
- color: #ffffff !important;
- font-size: 12px;
- line-height: 1.4;
- text-align: left;
- padding-bottom: 80px;
-}
-
-.mes_history_preview {
- opacity: 0.6;
- transition: opacity 0.2s ease-in-out;
-}
-
-.mes_history_preview:hover {
- opacity: 1;
-}
-
-/* ==================== 设置菜单和标签样式 ==================== */
-.menu-tab {
- flex: 1;
- padding: 2px 8px;
- text-align: center;
- cursor: pointer;
- color: #ccc;
- border: none;
- transition: color 0.2s ease;
- font-weight: 500;
-}
-
-.menu-tab:hover {
- color: #fff;
-}
-
-.menu-tab.active {
- color: #007acc;
- border-bottom: 2px solid #007acc;
-}
-
-.settings-section {
- padding: 10px 0;
-}
-
-/* ==================== Wallhaven自定义标签样式 ==================== */
-.custom-tags-container {
- margin-top: 10px;
-}
-
-.custom-tags-list {
- display: flex;
- flex-wrap: wrap;
- gap: 8px;
- margin-top: 8px;
- min-height: 20px;
- padding: 8px;
- background: #2a2a2a;
- border-radius: 4px;
- border: 1px solid #444;
-}
-
-.custom-tag-item {
- display: flex;
- align-items: center;
- background: #007acc;
- color: white;
- padding: 4px 8px;
- border-radius: 12px;
- font-size: 12px;
- gap: 6px;
-}
-
-.custom-tag-text {
- font-weight: 500;
-}
-
-.custom-tag-remove {
- cursor: pointer;
- color: rgba(255, 255, 255, 0.8);
- font-weight: bold;
- transition: color 0.2s ease;
-}
-
-.custom-tag-remove:hover {
- color: #ff6b6b;
-}
-
-.custom-tags-empty {
- color: #888;
- font-style: italic;
- font-size: 12px;
- text-align: center;
- padding: 8px;
-}
-
-.task_editor .menu_button{
- white-space: nowrap;
-}
-
-.message-preview-content-box:hover::-webkit-scrollbar-thumb,
-.xiaobai_template_editor:hover::-webkit-scrollbar-thumb {
- background: var(--SmartThemeAccent);
-}
-
-/* ==================== 滚动条样式 ==================== */
-.message-preview-content-box::-webkit-scrollbar,
-.xiaobai_template_editor::-webkit-scrollbar {
- width: 5px;
-}
-
-.message-preview-content-box::-webkit-scrollbar-track,
-.xiaobai_template_editor::-webkit-scrollbar-track {
- background: var(--SmartThemeBlurTintColor);
- border-radius: 3px;
-}
-
-.message-preview-content-box::-webkit-scrollbar-thumb,
-.xiaobai_template_editor::-webkit-scrollbar-thumb {
- background: var(--SmartThemeBorderColor);
- border-radius: 3px;
-
-}
-
-/* ==================== Story Outline PromptManager 编辑表单 ==================== */
-/* 当编辑 lwb_story_outline 条目时,隐藏名称输入框和内容编辑区 */
-
-.completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_name {
- pointer-events: none;
- user-select: none;
-}
-
-.1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_prompt {
- display: none !important;
-}
-
-/* 显示"内容来自外部"的提示 */
-.1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) .completion_prompt_manager_popup_entry_form_control:has(#completion_prompt_manager_popup_entry_form_prompt)::after {
- content: "此提示词的内容来自「LittleWhiteBox」,请在小白板中修改哦!";
- display: block;
- padding: 12px;
- margin-top: 8px;
- border: 1px solid var(--SmartThemeBorderColor);
- color: var(--SmartThemeEmColor);
- text-align: center;
-}
-
-/* 隐藏 lwb_story_outline 条目的 Remove 按钮(保留占位) */
-.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .prompt-manager-detach-action {
- visibility: hidden !important;
-}
-
-.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk {
- visibility: hidden !important;
- position: relative;
-}
-
-.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk::after {
- content: "\f00d";
- /* fa-xmark 的 unicode */
- font-family: "Font Awesome 6 Free";
- visibility: visible;
- position: absolute;
- left: 0;
- font-size: 1.2em;
-}
-
-#completion_prompt_manager_footer_append_prompt option[value="lwb_story_outline"] {
- display: none;
-}
+/* ==================== 基础工具样式 ==================== */
+pre:has(+ .xiaobaix-iframe) {
+ display: none;
+}
+
+/* ==================== 循环任务样式 ==================== */
+.task-container {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.task-container:empty::after {
+ content: "No tasks found";
+ font-size: 0.95em;
+ opacity: 0.7;
+ display: block;
+ text-align: center;
+}
+
+.scheduled-tasks-embedded-warning {
+ padding: 15px;
+ background: var(--SmartThemeBlurTintColor);
+ border: 1px solid var(--SmartThemeBorderColor);
+ border-radius: 8px;
+ margin: 10px 0;
+}
+
+.warning-note {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-top: 10px;
+ padding: 8px;
+ background: rgba(255, 193, 7, 0.1);
+ border-left: 3px solid #ffc107;
+ border-radius: 4px;
+}
+
+.task-item {
+ align-items: center;
+ border: 1px solid var(--SmartThemeBorderColor);
+ border-radius: 10px;
+ padding: 0 5px;
+ margin-top: 1px;
+ margin-bottom: 1px;
+}
+
+.task-item:has(.disable_task:checked) .task_name {
+ text-decoration: line-through;
+ filter: grayscale(0.5);
+}
+
+.task_name {
+ font-weight: normal;
+ color: var(--SmartThemeEmColor);
+ font-size: 0.9em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.drag-handle {
+ cursor: grab;
+ color: var(--SmartThemeQuoteColor);
+ margin-right: 8px;
+ user-select: none;
+}
+
+.drag-handle:active {
+ cursor: grabbing;
+}
+
+.checkbox {
+ align-items: center;
+}
+
+.task_editor {
+ width: 100%;
+}
+
+.task_editor .flex-container {
+ gap: 10px;
+}
+
+.task_editor textarea {
+ font-family: 'Courier New', monospace;
+}
+
+input.disable_task {
+ display: none !important;
+}
+
+.task-toggle-off {
+ cursor: pointer;
+ opacity: 0.5;
+ filter: grayscale(0.5);
+ transition: opacity 0.2s ease-in-out;
+}
+
+.task-toggle-off:hover {
+ opacity: 1;
+ filter: none;
+}
+
+.task-toggle-on {
+ cursor: pointer;
+}
+
+.disable_task:checked~.task-toggle-off {
+ display: block;
+}
+
+.disable_task:checked~.task-toggle-on {
+ display: none;
+}
+
+.disable_task:not(:checked)~.task-toggle-off {
+ display: none;
+}
+
+.disable_task:not(:checked)~.task-toggle-on {
+ display: block;
+}
+
+/* ==================== 沉浸式显示模式样式 ==================== */
+body.immersive-mode #chat {
+ padding: 0 !important;
+ border: 0px !important;
+ overflow-y: auto;
+ margin: 0 0px 0px 4px !important;
+ scrollbar-width: thin;
+ scrollbar-gutter: auto;
+}
+
+.xiaobaix-top-group {
+ margin-top: 1em !important;
+}
+
+@media screen and (min-width: 1001px) {
+ body.immersive-mode #chat {
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+ /* IE and Edge */
+ }
+
+ body.immersive-mode #chat::-webkit-scrollbar {
+ display: none;
+ }
+}
+
+body.immersive-mode .mesAvatarWrapper {
+ margin-top: 1em;
+ padding-bottom: 0px;
+}
+
+body.immersive-mode .swipe_left,
+body.immersive-mode .swipeRightBlock {
+ display: none !important;
+}
+
+body.immersive-mode .mes {
+ margin: 2% 0 0% 0 !important;
+}
+
+body.immersive-mode .ch_name {
+ padding-bottom: 5px;
+ border-bottom: 0.5px dashed color-mix(in srgb, var(--SmartThemeEmColor) 30%, transparent);
+}
+
+body.immersive-mode .mes_block {
+ padding-left: 0 !important;
+ margin: 0 0 5px 0 !important;
+}
+
+body.immersive-mode .mes_text {
+ padding: 0px !important;
+ max-width: 100%;
+ width: 100%;
+ margin-top: 5px;
+}
+
+body.immersive-mode .mes {
+ width: 99%;
+ margin: 0 0.5%;
+ padding: 0px !important;
+}
+
+body.immersive-mode .mes_buttons,
+body.immersive-mode .mes_edit_buttons {
+ position: absolute !important;
+ top: 0 !important;
+ right: 0 !important;
+}
+
+body.immersive-mode .mes_buttons {
+ height: 20px;
+ overflow-x: clip;
+}
+
+body.immersive-mode .swipes-counter {
+ padding-left: 0px;
+ margin-bottom: 0 !important;
+}
+
+body.immersive-mode .flex-container.flex1.alignitemscenter {
+ min-height: 32px;
+}
+
+.immersive-navigation {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-end;
+ margin-top: 5px;
+ opacity: 0.7;
+}
+
+.immersive-nav-btn {
+ color: var(--SmartThemeBodyColor);
+ cursor: pointer;
+ transition: all 0.2s ease;
+ background: none;
+ border: none;
+ font-size: 12px;
+}
+
+.immersive-nav-btn:hover:not(:disabled) {
+ background-color: rgba(var(--SmartThemeBodyColor), 0.2);
+ transform: scale(1.1);
+}
+
+.immersive-nav-btn:disabled {
+ opacity: 0.3;
+ cursor: not-allowed;
+}
+
+/* ==================== 模板编辑器样式 ==================== */
+.xiaobai_template_editor {
+ max-height: 80vh;
+ overflow-y: auto;
+ padding: 20px;
+ border-radius: 8px;
+}
+
+.template-replacer-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 10px;
+}
+
+.template-replacer-title {
+ font-weight: bold;
+ color: var(--SmartThemeEmColor, #007bff);
+}
+
+.template-replacer-controls {
+ display: flex;
+ align-items: center;
+ gap: 15px;
+}
+
+.template-replacer-status {
+ font-size: 12px;
+ color: var(--SmartThemeQuoteColor, #888);
+ font-style: italic;
+}
+
+.template-replacer-status.has-settings {
+ color: var(--SmartThemeEmColor, #007bff);
+}
+
+.template-replacer-status.no-character {
+ color: var(--SmartThemeCheckboxBgColor, #666);
+}
+
+/* ==================== 消息预览插件样式 ==================== */
+#message_preview_btn {
+ width: var(--bottomFormBlockSize);
+ height: var(--bottomFormBlockSize);
+ margin: 0;
+ border: none;
+ cursor: pointer;
+ opacity: 0.7;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: opacity 300ms;
+ color: var(--SmartThemeBodyColor);
+ font-size: var(--bottomFormIconSize);
+}
+
+#message_preview_btn:hover {
+ opacity: 1;
+ filter: brightness(1.2);
+}
+
+.message-preview-content-box {
+ font-family: 'Courier New', 'Monaco', 'Menlo', monospace;
+ white-space: pre-wrap;
+ max-height: 82vh;
+ overflow-y: auto;
+ padding: 15px;
+ background: #000000 !important;
+ border: 1px solid var(--SmartThemeBorderColor);
+ border-radius: 5px;
+ color: #ffffff !important;
+ font-size: 12px;
+ line-height: 1.4;
+ text-align: left;
+ padding-bottom: 80px;
+}
+
+.mes_history_preview {
+ opacity: 0.6;
+ transition: opacity 0.2s ease-in-out;
+}
+
+.mes_history_preview:hover {
+ opacity: 1;
+}
+
+/* ==================== 设置菜单和标签样式 ==================== */
+.menu-tab {
+ flex: 1;
+ padding: 2px 8px;
+ text-align: center;
+ cursor: pointer;
+ color: #ccc;
+ border: none;
+ transition: color 0.2s ease;
+ font-weight: 500;
+}
+
+.menu-tab:hover {
+ color: #fff;
+}
+
+.menu-tab.active {
+ color: #007acc;
+ border-bottom: 2px solid #007acc;
+}
+
+.settings-section {
+ padding: 10px 0;
+}
+
+/* ==================== Wallhaven自定义标签样式 ==================== */
+.custom-tags-container {
+ margin-top: 10px;
+}
+
+.custom-tags-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ margin-top: 8px;
+ min-height: 20px;
+ padding: 8px;
+ background: #2a2a2a;
+ border-radius: 4px;
+ border: 1px solid #444;
+}
+
+.custom-tag-item {
+ display: flex;
+ align-items: center;
+ background: #007acc;
+ color: white;
+ padding: 4px 8px;
+ border-radius: 12px;
+ font-size: 12px;
+ gap: 6px;
+}
+
+.custom-tag-text {
+ font-weight: 500;
+}
+
+.custom-tag-remove {
+ cursor: pointer;
+ color: rgba(255, 255, 255, 0.8);
+ font-weight: bold;
+ transition: color 0.2s ease;
+}
+
+.custom-tag-remove:hover {
+ color: #ff6b6b;
+}
+
+.custom-tags-empty {
+ color: #888;
+ font-style: italic;
+ font-size: 12px;
+ text-align: center;
+ padding: 8px;
+}
+
+.task_editor .menu_button{
+ white-space: nowrap;
+}
+
+.message-preview-content-box:hover::-webkit-scrollbar-thumb,
+.xiaobai_template_editor:hover::-webkit-scrollbar-thumb {
+ background: var(--SmartThemeAccent);
+}
+
+/* ==================== 滚动条样式 ==================== */
+.message-preview-content-box::-webkit-scrollbar,
+.xiaobai_template_editor::-webkit-scrollbar {
+ width: 5px;
+}
+
+.message-preview-content-box::-webkit-scrollbar-track,
+.xiaobai_template_editor::-webkit-scrollbar-track {
+ background: var(--SmartThemeBlurTintColor);
+ border-radius: 3px;
+}
+
+.message-preview-content-box::-webkit-scrollbar-thumb,
+.xiaobai_template_editor::-webkit-scrollbar-thumb {
+ background: var(--SmartThemeBorderColor);
+ border-radius: 3px;
+
+}
+
+/* ==================== Story Outline PromptManager 编辑表单 ==================== */
+/* 当编辑 lwb_story_outline 条目时,隐藏名称输入框和内容编辑区 */
+
+.completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_name {
+ pointer-events: none;
+ user-select: none;
+}
+
+.1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_prompt {
+ display: none !important;
+}
+
+/* 显示"内容来自外部"的提示 */
+.1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) .completion_prompt_manager_popup_entry_form_control:has(#completion_prompt_manager_popup_entry_form_prompt)::after {
+ content: "此提示词的内容来自「LittleWhiteBox」,请在小白板中修改哦!";
+ display: block;
+ padding: 12px;
+ margin-top: 8px;
+ border: 1px solid var(--SmartThemeBorderColor);
+ color: var(--SmartThemeEmColor);
+ text-align: center;
+}
+
+/* 隐藏 lwb_story_outline 条目的 Remove 按钮(保留占位) */
+.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .prompt-manager-detach-action {
+ visibility: hidden !important;
+}
+
+.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk {
+ visibility: hidden !important;
+ position: relative;
+}
+
+.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk::after {
+ content: "\f00d";
+ /* fa-xmark 的 unicode */
+ font-family: "Font Awesome 6 Free";
+ visibility: visible;
+ position: absolute;
+ left: 0;
+ font-size: 1.2em;
+}
+
+#completion_prompt_manager_footer_append_prompt option[value="lwb_story_outline"] {
+ display: none;
+}