主页主题
oscarstudio.cn 主站支持两套可选主页风格,可在 Customization 页面里切换。设置会保存到账户,跨设备生效。
经典自定义(classic)
主站当前版本。
- 支持上传自定义背景图、调整遮罩不透明度与模糊度
- 5 个工具段直接铺在主页
- 与背景音乐、液态玻璃等所有现有设置兼容
Atlas(实验)
来自 crazy/4 的实验主题(曾用 crazy/3)。浅色 paper/ink 设计语言、xAI 风格的留白与节奏。
- 极浅纸面画布(
#FAFAF7),细发丝边线,黑底深色 hero 标题 - Hero 区 Antigravity 粒子环(基于
@react-three/fiber+three) - DotField 圆点背景(鼠标移动时有 bulge 效果)+ SplitText 字符逐字入场
- TopNav 浮条、SectionIndicator 左侧目录、OpilotModal(⌘K 唤起)
- 主题内切 paper/ink 两套配色(Closing 区"Subscribe"切换)
- 不应用 用户上传的背景图(自带的暗色粒子与点阵已自洽)
- 用户自定义的背景图仍保存在
ui_config里,切回 classic 时还在
首次切换到 Atlas 时会从
crazy/4子树懒加载约 150 kB JS(含 three.js)+ 内联 CSS。Classic 用户首屏不会下载这些资源。
切换方法
- 访问 https://api.oscarstudio.cn/settings 登录(如未登录)
- 滚到 主页主题 卡片,选择 经典自定义 或 Atlas(实验)
- 点底部 保存设置
新用户默认
所有"没有显式选过主题"的用户默认 Atlas(包括未登录访客、首次登录新用户、已有 ui_config 但从未保存过主题的老用户)。要保留 classic 需要在 settings 里手动切换一次,之后会同步到所有设备。
技术细节
- 主页主题字段:
users.ui_config.homeTheme,合法值为'classic' | 'atlas' - 渲染入口:
main-station/src/App.tsx根据useHomeTheme()返回值决定渲染ClassicTree还是lazy(() => import('./themes/atlas/ThemeApp')) - 样式隔离:Atlas 子树挂在
#atlas-scope下,Tailwind 配置important: '#atlas-scope'+corePlugins.preflight: false,不污染经典主页的全局 CSS - CSS 变量:crazy/4 的 paper/ink vars 挂在
:where(#atlas-scope)上(而不是:root),避免与主站 classic 主题的--dark --light等冲突 - paper/ink 切换:crazy/4 的
useTheme只改#atlas-scope的data-theme,不碰<html>的(<html>上的data-theme="light|dark"由主站 classic 在用,两套独立) - 数据持久化:双写(
localStorage['oscar-home-theme']立即生效 +POST /api/ui同步到服务端)
开发者:增加第三个主题
- 在
main-station/src/themes/<id>/下新建一份主题组件树(参考src/themes/atlas/的结构,自带<ThemeApp />默认导出,挂#<id>-scope容器) - 在
API/routes/ui.js把VALID_HOME_THEMES与defaultHomeTheme()的分支补上 - 在
main-station/vite.config.ts的manualChunks加一条新规则(让它的 heavy deps 也归到同一 chunk) - 在
main-station/src/hooks/useHomeTheme.tsx的白名单加上新值 - 在
API/public/settings.html加一张主题卡 - 文档站
docs/docs/main-station/home-theme.mdx加一段介绍