主题

主题用于统一设置聊天外观,包括背景、消息气泡、字体、头像和输入区。你可以直接使用已有主题,也可以复制后进行调整。

选择与编辑主题

  1. 从左侧边栏底部的「更多」进入「主题」。
  2. 选择要应用的主题,或打开自建主题进行编辑。官方主题只读,需要修改时先复制一份。
  3. 调整背景、气泡、字体、头像和输入区设置,预览后保存。

同一个主题可以被多个聊天使用,修改后会影响所有使用它的聊天。要为某个聊天单独设置外观,先创建或复制一个独立主题,再应用到该聊天。

自定义 CSS

基础设置不能满足需求时,可以在主题中添加 CSS,进一步调整消息、头像和输入区样式。此功能需要开启高级渲染。

编辑样式

  1. 在主题编辑页打开「自定义样式」,在「自定义 CSS」中填写完整 CSS 规则。不要加入 HTML、<style> 标签或 Markdown 代码围栏。
  2. 点击「CSS 助手」选择目标区域,使用「预览」查看效果,再返回主题编辑页保存,并将主题应用到聊天。
  3. 在设置中开启高级前端渲染

编辑器提供语法高亮、缩进、撤销和重做,手机键盘弹出时还有快捷编辑栏。语法错误提示只是辅助检查,不阻止保存,也不代表浏览器一定支持所有属性。预览后仍需在真实聊天中检查长消息、键盘弹出和生成中等状态。

作用范围与覆盖规则

  • CSS 随主题保存,使用同一主题的聊天会共享这些规则。要只修改一个聊天,先创建或复制独立主题,再绑定到该聊天。
  • 自定义样式在主题基础样式之后应用。
  • CSS 可以修改下表列出的消息、头像和 Web 输入区。设置页、菜单和系统弹窗不在作用范围内。
  • 清空自定义 CSS 并保存即可恢复主题的基础样式。仅更改基础颜色等设置时,已有 CSS 仍可能覆盖这些设置。

公开选择器

以下清单与应用内 CSS Helper 一致,是对外支持的全部选择器。使用这些选择器搭配标准 CSS 属性,不要依赖未列出的 DOM 类、内部 CSS 变量、私有属性或子节点结构。

选择器作用区域
.tav-bubble所有消息气泡
.tav-user-bubble用户气泡
.tav-character-bubble角色气泡
.tav-bubble-content所有气泡内容容器
.tav-user-bubble-content用户气泡内容容器
.tav-character-bubble-content角色气泡内容容器
.tav-bubble-content-body气泡内容主体
.tav-message-content消息正文
.tav-message-attachments消息附件区域
.tav-message-reasoning整个思考过程区域
.tav-message-reasoning > summary思考过程标题
.tav-avatar所有头像
.tav-user-avatar, .tav-group-user-avatar用户头像,含群聊
.tav-character-avatar, .tav-group-character-avatar角色头像,含群聊
.tav-speaker-name发言人名称
.tav-composer输入区域
.tav-composer-shell输入框外壳
.tav-composer-input文字输入框
.tav-composer-add-icon加号图标
.tav-composer-send-icon发送图标
.tav-composer-stop-icon停止图标
.tav-composer-voice-icon录音图标

内容容器适合设置字体,气泡外层适合设置背景、边框和阴影。正文中有单独样式的文字可能不会继承容器颜色。思考、附件、头像和名称只有在对应内容存在且启用显示时才有可见效果,具体布局也取决于气泡或平铺等显示模式。

发送、停止和录音图标随输入区状态切换,并非同时存在。停止图标用于生成停止和桌面录音停止状态。图标选择器命中的是图片,适合调整尺寸、透明度或滤镜,color 不会直接给图片改色。修改图标不等于修改按钮的点击范围。

可复制的样式

正文间距与角色气泡边框

.tav-message-content {
  line-height: 1.8;
  letter-spacing: 0.02em;
}

.tav-character-bubble {
  border: 1px solid rgba(160, 180, 220, 0.4);
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12);
}

输入框背景、圆角与文字

.tav-composer-shell {
  background: rgba(24, 28, 40, 0.85);
  border: 1px solid rgba(180, 195, 230, 0.35);
  border-radius: 16px;
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}

.tav-composer-input {
  color: #edf2ff;
  font-size: 16px;
}

停止图标

.tav-composer-stop-icon {
  width: 22px;
  height: 22px;
  opacity: 0.85;
}

思考标题与发言人

.tav-message-reasoning > summary {
  font-weight: 600;
  opacity: 0.8;
}

.tav-speaker-name {
  letter-spacing: 0.04em;
}

每次先加一段规则,再预览效果。避免用全局样式重排聊天页面,也不要修改输入区的定位、交互状态或事件处理。

通过 API 或工具保存 CSS

三个接口写入同一个顶层字段 customCss,值是原始 CSS 字符串,不是对象或文件路径。

接口写入方式
TavoJStavo.theme.create({ name, customCss })tavo.theme.update(id, { customCss })
MCPtavo_theme_createtheme.customCss,或 tavo_theme_updatepatch.customCss,更新使用 id
原生 Tool Calling同名主题工具的 theme.customCss / patch.customCss,更新使用 themeId

创建时省略 customCss 默认是空字符串。更新时省略则保留原值,传 "" 清空,传入新字符串会替换整段 CSS,不会按选择器合并。想保留旧规则时先读取主题,再自行合并字符串。null 不是有效的清空方式。API 保存字符串不等于验证 CSS 语法或视觉效果。

const id = await tavo.theme.create({
  name: '柔和边框',
  customCss: '.tav-character-bubble { border: 1px solid rgba(160, 180, 220, 0.4); }',
})
await tavo.chat.update({ theme: id })

需要恢复时,单独执行:

await tavo.theme.update(id, { customCss: '' })

更新当前使用的主题会原位更新 WebView 样式,不需要刷新页面。创建主题本身不会自动将它应用到当前聊天。修改已有共享主题前应明确受影响的聊天。

主题 .thm 导出会在 theme.json 中以 custom_css 保存 CSS,导入后保留。旧文件缺少此字段时按空字符串处理,API 字段仍叫 customCss。外部字体或图片等 URL 资源不会因为写进 CSS 就自动打包进主题。

没有效果或布局异常时

  1. 确认已开启高级渲染,并且当前聊天正在使用保存后的主题。
  2. 从 CSS Helper 重新选择目标,核对拼写。只在录音、生成或带附件时出现的元素,需要在相应状态下检查。
  3. 检查大括号、分号、属性单位和颜色格式。编辑器提示只是语法辅助。
  4. 检查是否被更具体的规则、内联样式或消息自己的样式覆盖。不要一开始就给所有规则加 !important
  5. 图片图标不能直接用 color 改色,原生界面和独立 iframe 内部也不会被这些规则修改。
  6. 无法定位时先备份 CSS,再清空并保存。确认恢复后逐段加回规则,定位造成问题的部分。

目录