From 33e31cf4dc168643cc7d4c58260b3f6ac52353c3 Mon Sep 17 00:00:00 2001 From: tamakyi Date: Mon, 19 Oct 2026 23:01:55 +0800 Subject: [PATCH] =?UTF-8?q?theme(shiroko):=20=E6=8C=89=E4=BA=8C=E6=AC=A1?= =?UTF-8?q?=E5=85=83=E5=AE=98=E7=BD=91=E6=9E=84=E5=9B=BE=E9=87=8D=E5=81=9A?= =?UTF-8?q?=E2=80=94=E2=80=94=E6=95=B4=E9=A1=B5=E5=9C=BA=E6=99=AF=20+=20?= =?UTF-8?q?=E6=82=AC=E6=B5=AE=E7=A3=A8=E7=A0=82=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 参考蔚蓝档案 JP 首页(bluearchive.jp)的做法:整个视口是一张场景插画,UI 浮在场景之上, 而不是"白底 + 留白里贴几个人物"。之前几版反复调摆位都显得怪,根源就是缺了这层场景—— 人物没有环境,怎么摆都是贴纸。 - 新增教室场景两张(1920×1080 / 720×1003,共 28KB):生成后裁掉右下角水印、 混白 38%、模糊 1.4px,保证白卡片仍有对比度; - 卡片与顶栏改半透明白 + backdrop-filter 磨砂(深色关闭,背后没场景时半透明只会变浑); - 人物站在场景左侧地面(340px,离底边 36px)+ 椭圆接触阴影; - 浅色不再叠平铺纹样(压在实景上会变噪点),pattern.svg 删除,深色保留 pattern-dark; - 顺带修 ruleBody 不剥 CSS 注释的缺陷:令牌前写注释会让 tokenValue 取到粘连键, 色块预览静默失效(新增 TestRuleBodyIgnoresComments 守住); - StaticVersion → 20261019q --- docs/theme-shiroko.md | 67 ++++++++----- internal/conf/static.go | 2 +- internal/theme/theme.go | 6 +- internal/theme/theme_test.go | 13 +++ static/css/themes/shiroko.css | 90 ++++++++++-------- static/images/themes/shiroko/pattern-dark.svg | 2 +- static/images/themes/shiroko/pattern.svg | 16 ---- .../images/themes/shiroko/scene-desktop.webp | Bin 0 -> 22122 bytes .../images/themes/shiroko/scene-mobile.webp | Bin 0 -> 6246 bytes 9 files changed, 110 insertions(+), 86 deletions(-) delete mode 100644 static/images/themes/shiroko/pattern.svg create mode 100644 static/images/themes/shiroko/scene-desktop.webp create mode 100644 static/images/themes/shiroko/scene-mobile.webp diff --git a/docs/theme-shiroko.md b/docs/theme-shiroko.md index 6b32803..4e6ec28 100644 --- a/docs/theme-shiroko.md +++ b/docs/theme-shiroko.md @@ -20,33 +20,27 @@ available = default,sakura,shiroko | `--tb-text` | `#222d3b` | `#e3eaf4` | | `--tb-primary` | `#4a7fc1` | `#6fa3e0` | -## 插画布置 +## 视觉构图 -| 位置 | 内容 | 尺寸 | +参考对象:**蔚蓝档案 JP 官网首页**(`https://bluearchive.jp/`)。它的做法不是"白底 + 留白里贴几个人物", +而是 **整个视口是一张场景插画,UI 浮在场景之上**。本主题照这个结构重排: + +| 层 | 内容 | 实现 | | --- | --- | --- | -| 卡片左下外侧 | `sit`(盘腿坐),右侧约 40px 钻进卡片底下 | `auto 340px`,≤1179px 时 `280px` | -| 人物脚下 | 椭圆接触阴影(CSS `radial-gradient`,不是图片) | `128px 15px` | -| 整页平铺 | 雪花 ×2 + 光环 + 两点(340px 一铺,opacity 0.085) | `pattern.svg` | -| ≤900px | 不出人物 —— 卡片占满宽度,两侧没有视觉空间 | `@media` | +| 底层 | 教室场景插画(压白 38%、轻度虚化) | `--tb-page-image`,16:9 桌面 / 9:16 移动两张 | +| 中层 | 卡片与顶栏:半透明白 + `backdrop-filter` 磨砂 | `--tb-surface: rgba(255,255,255,.86)` / `--tb-navbar` | +| 上层 | 人物站在场景左侧地面(337px 高)+ 椭圆接触阴影 | `--tb-deco` 前两个槽位 | +| 深色 | 不用场景(白天教室压在深底上会脏),回到深色渐变 + 极淡纹样 | 深色块单独覆盖 | -摆位为什么是这个人样: +摆位经验(都是踩过的): -- **不要四角各摆一个**。人物之间、人物与内容之间都没有关系,读起来就是贴纸墙纸; -- **右下角不能放人**。页脚文案右对齐(社区规则 / 备案号 / 存活时长),人物会和它挤在一起; -- **要半隐在卡片后面**。被卡片挡掉一部分才有空间关系,否则就是浮在留白中间; - 卡片定宽 750px 居中,左沿 = `50% - 375px`,人物宽约 177px,左移 515px 即遮住 40px; -- **离底边留 26px**。脚踩在窗口最后一行像素上会被读成"被裁掉",抬高之后必须配接触阴影, - 否则变成悬空。 -- **纹样元素要均布**。全挤在 tile 上半部时,铺开后在整页形成明显的横向条纹带。 - -插画走 **装饰层**(`--tb-deco` / `--tb-deco-size` / `--tb-deco-position`),不是整页背景图: - -- 固定像素尺寸 + 四角定位,**任何视口比例都不会被裁切**(`cover` 做不到,竖屏桌面会把贴边的插画切掉); -- 固定 6 个槽位,必须写满 6 个值,缺的填 `none` —— 多背景各列表的层数必须恒定 - (1 图案 + 6 装饰 + 1 背景 = 8),值一多一少,分层就整体错位(会出现整页重复小人); -- 深色模式关掉装饰层,只留底色与浅色图案。人物是银白/浅灰为主,压到深色底上会发灰发脏。 -- 图案是图片,不走 `StaticVersion` 缓存键(`Cache-Control: max-age=86400`): - 换 `pattern*.svg` 时要自己给 css 里的 url 补一个 `?v=`,否则老访客最多 24 小时看到旧纹样。 +- **不要四角各摆一个人**。人物之间、人物与内容之间都没有关系,读起来就是贴纸墙纸; + 人物必须"站在场景里"——有地面、有阴影、有环境,才不像贴纸。 +- **右下角不能放人**。页脚文案右对齐(社区规则 / 备案号 / 存活时长),会和人物挤在一起。 +- **离底边留 36px**。脚踩在窗口最后一行像素上会被读成"被裁切",抬高之后必须配接触阴影,否则变成悬空。 +- **纹样不要压在实景上**。平铺纹样叠在教室插画上会变成噪点,只在深色(无场景)时使用。 +- **背景图会被 `cover` 裁切**,所以场景里不能有必须完整露出的元素:教室的黑板和窗户都在中部,裁掉两头不影响。 +- **人物比例要跟场景对得上**。340px 是相对"站在前景"的尺度;缩到 240px 以下会显得像贴纸浮在半空。 ## 素材清单 @@ -59,8 +53,9 @@ available = default,sakura,shiroko | `chibi/think.webp` | 托腮 | 283×620 | 26KB | | `chibi/doze.webp` | 打瞌睡 | 274×620 | 26KB | | `chibi/sit.webp` | 盘腿坐 | 321×620 | 29KB | -| `pattern.svg` | 浅色平铺(几何纹样) | 240×240 | 0.9KB | -| `pattern-dark.svg` | 深色平铺 | 240×240 | 0.8KB | +| `scene-desktop.webp` | 教室场景(16:9,压白 38% + 虚化 1.4px) | 1920×1080 | 22KB | +| `scene-mobile.webp` | 教室场景(9:16 中裁) | 720×1003 | 6KB | +| `pattern-dark.svg` | 深色模式平铺纹样(雪花 + 光环) | 240×240 | 0.7KB | ## 来源与授权 @@ -68,7 +63,8 @@ available = default,sakura,shiroko | --- | --- | | `static/images/shiroko-cutout.png` | **用户自行用 AI 生成**的立绘,仅作生成参考图,不再上页面 | | `chibi/*.webp` | WorkBuddy ImageGen **以用户立绘为参考图**(image-to-image)生成,再抠白底 | -| `pattern.svg` / `pattern-dark.svg` | 手写 SVG,纯几何,无外部素材 | +| `scene-desktop.webp` / `scene-mobile.webp` | WorkBuddy ImageGen 生成(提示词见下),未使用任何外部素材 | +| `pattern-dark.svg` | 手写 SVG,纯几何,无外部素材 | ### 生成与抠图参数 @@ -134,3 +130,22 @@ level=info msg="主题注册表已加载" enabled="default,sakura" level=warning msg="[theme] available 未登记以下主题,它们不会出现在设置页" available="default,sakura,shiroko" themes=shiroko ``` + +## 场景图的生成 + +整页背景是一张生成的教室插画,提示词: + +``` +Empty Japanese high school classroom in the afternoon, flat pastel anime background art, +very light and airy, pale blue-grey and warm cream palette, rows of desks softly out of focus, +big windows with soft daylight, thin clean shapes, low contrast, minimal detail, +large calm empty area in the center, no characters, no text, no watermark, +wide scene suitable as a website background +``` + +生成后处理(PIL,脚本未入库,参数记在这里): + +1. 裁掉图片底部 160px —— 生成器会在右下角打 `AI生成 WORKBUDDY` 水印,不裁会出现在页面上; +2. 按 16:9 取顶部 864px,整体混白 38%(`v*0.62 + 255*0.38`)—— 保证白卡片放上去仍有足够对比度; +3. 高斯模糊 1.4px,让桌椅不抢正文; +4. 导出 WebP q80(1920×1080,22KB);移动端从同一张按 9:16 中裁 620px 宽,导出 720×1003。 diff --git a/internal/conf/static.go b/internal/conf/static.go index 4327ad6..b4fe946 100644 --- a/internal/conf/static.go +++ b/internal/conf/static.go @@ -10,7 +10,7 @@ var ( BuildCommit = "dev" // StaticVersion 静态资源缓存版本号:base.css 与主题 css 共用,改样式只改这一处。 - StaticVersion = "20261019p" + StaticVersion = "20261019q" ) // 文本审核通道取值([security] text_censor_source)。定义在 conf 侧, diff --git a/internal/theme/theme.go b/internal/theme/theme.go index c77b855..aacda6e 100644 --- a/internal/theme/theme.go +++ b/internal/theme/theme.go @@ -28,6 +28,8 @@ var ( slugRe = regexp.MustCompile(`^[a-z0-9][a-z0-9-]{0,31}$`) // 仅接受纯色值,避免把主题文件里的任意内容拼进设置页的 style 属性。 colorRe = regexp.MustCompile(`^(#[0-9a-fA-F]{3,8}|rgba?\([0-9.,\s%/]+\))$`) + // 主题 css 里的块注释;取令牌前先剥掉,避免注释与令牌粘连 + commentRe = regexp.MustCompile(`(?s)/\*.*?\*/`) ) // Theme 是设置页需要的一项。名称由 i18n 键 theme.name. 提供, @@ -174,7 +176,9 @@ func ruleBody(css, selector string) string { if end < 0 { return "" } - return css[start : start+end] + // 注释必须剥掉:tokenValue 按 ";" 切分再按 ":" 取值,行内注释会和后面的令牌粘成一段, + // 取到的键变成 "/* ... */ --tb-surface",色块预览就静默失效。 + return commentRe.ReplaceAllString(css[start:start+end], "") } func tokenValue(block, name string) string { diff --git a/internal/theme/theme_test.go b/internal/theme/theme_test.go index e81aa9e..2a5e315 100644 --- a/internal/theme/theme_test.go +++ b/internal/theme/theme_test.go @@ -102,3 +102,16 @@ func TestSwatch(t *testing.T) { assert.Equal(t, "", swatchOf(`html[data-theme-style="x"] { --tb-bg: url(evil); --tb-primary: #fff; }`, "x"), "非色值内容不得进入 swatch") } + +func TestRuleBodyIgnoresComments(t *testing.T) { + // 令牌前面写一行注释很常见;不剥注释的话 tokenValue 会取到 + // "/* ... */ --tb-bg" 这种粘连键,色块预览静默失效。 + css := `html[data-theme-style="x"] { + /* 磨砂卡片:半透明白 */ + --tb-bg: #ffffff; + --tb-primary: rgba(74, 127, 193, 0.11); +}` + body := ruleBody(css, `html[data-theme-style="x"]`) + assert.Equal(t, "#ffffff", tokenValue(body, "--tb-bg")) + assert.Equal(t, "rgba(74, 127, 193, 0.11)", tokenValue(body, "--tb-primary")) +} diff --git a/static/css/themes/shiroko.css b/static/css/themes/shiroko.css index 25153fb..a0517d1 100644 --- a/static/css/themes/shiroko.css +++ b/static/css/themes/shiroko.css @@ -1,16 +1,22 @@ /* 砂狼白子(shiroko):阿拜多斯学园的灰蓝/银白配色。 只覆盖令牌与外观层面的组件微调,不改任何布局。 + 做法参考二次元官网(蔚蓝档案 JP 首页)的构图:**整个视口是一张场景插画,UI 浮在场景之上**, + 而不是"白底 + 留白里贴几个人"。这里用一张教室场景(压白 38%)当整页背景, + 卡片与顶栏改成磨砂半透明,人物站在场景左侧地面 —— 人物有环境,才不像贴纸。 + 素材(static/images/themes/shiroko/): + - scene-desktop.webp / scene-mobile.webp 教室场景(16:9 / 9:16,已压白与轻度虚化) - chibi/*.webp Q 版人物(wave/cheer/think/doze/sit),以用户立绘为参考图生成 + 抠白底 - - pattern.svg / pattern-dark.svg 雪花 + 光环的极淡平铺纹样 - 来源、提示词与抠图参数见 docs/theme-shiroko.md。 */ + - pattern.svg / pattern-dark.svg 雪花 + 光环的极淡平铺纹样(深色模式用) + 来源、提示词与处理参数见 docs/theme-shiroko.md。 */ html[data-theme-style="shiroko"] { - --tb-bg: #edf2f8; - --tb-surface: #ffffff; - --tb-surface-2: #e5ecf5; - --tb-surface-hover: #eaf1f9; - --tb-navbar: #edf2f8; + --tb-bg: #eef3f9; + /* 磨砂卡片:半透明白 + backdrop-filter,让场景的颜色透上来一点点 */ + --tb-surface: rgba(255, 255, 255, 0.86); + --tb-surface-2: rgba(229, 236, 245, 0.92); + --tb-surface-hover: rgba(234, 241, 249, 0.92); + --tb-navbar: rgba(255, 255, 255, 0.52); --tb-border: #d6e0ec; --tb-text: #222d3b; @@ -20,28 +26,23 @@ html[data-theme-style="shiroko"] { --tb-primary: #4a7fc1; --tb-primary-weak: rgba(74, 127, 193, 0.11); - --tb-shadow: 0 1px 2px rgba(38, 56, 82, 0.05), 0 12px 28px -18px rgba(38, 56, 82, 0.24); - --tb-shadow-hover: 0 1px 2px rgba(38, 56, 82, 0.07), 0 18px 40px -20px rgba(38, 56, 82, 0.32); + --tb-shadow: 0 1px 2px rgba(38, 56, 82, 0.05), 0 18px 44px -22px rgba(38, 56, 82, 0.30); + --tb-shadow-hover: 0 1px 2px rgba(38, 56, 82, 0.07), 0 24px 56px -24px rgba(38, 56, 82, 0.38); - /* 整页底色用极浅的竖向渐变(纯 CSS):比图片稳,不会有 cover 缩放差异 */ - --tb-page-image: linear-gradient(180deg, #f8fbfe 0%, #edf3f9 58%, #e2ecf6 100%); - --tb-page-pattern: url("/static/images/themes/shiroko/pattern.svg?v=20261019p"); - --tb-page-pattern-size: 340px 340px; + /* 整页场景:一张教室插画,cover 铺满;不再叠纹样(纹样压在实景上会变成噪点) */ + --tb-page-image: url("/static/images/themes/shiroko/scene-desktop.webp?v=20261019q"); + --tb-page-pattern: none; - /* 装饰层:一个人半隐在卡片左侧后面。 - 卡片是 750px 定宽居中,左沿 = 50% - 375px;人物宽约 177px,左移 515px 就有 40px - 钻进卡片底下 —— 被卡片挡住一部分,才有「站在内容后面」的空间关系,而不是浮在留白里。 - 离底边 26px:踩在浏览器的最后一行像素上会像被裁掉。 - 右下角不能放人 —— 页脚文案右对齐(社区规则 / 备案号),会和人物挤在一起。 */ + /* 人物站在场景左侧地面:离底边 36px,配一层椭圆接触阴影,避免悬空 */ --tb-deco: url("/static/images/themes/shiroko/chibi/sit.webp"), - radial-gradient(ellipse at center, rgba(63, 96, 138, 0.22) 0%, rgba(63, 96, 138, 0) 72%), + radial-gradient(ellipse at center, rgba(63, 96, 138, 0.20) 0%, rgba(63, 96, 138, 0) 72%), none, none, none, none; - --tb-deco-size: auto 340px, 128px 15px, auto, auto, auto, auto; - --tb-deco-position: left max(6px, calc(50% - 515px)) bottom 26px, - left max(6px, calc(50% - 487px)) bottom 19px, left top, left top, left top, left top; + --tb-deco-size: auto 340px, 120px 14px, auto, auto, auto, auto; + --tb-deco-position: left max(6px, calc(50% - 520px)) bottom 36px, + left max(6px, calc(50% - 492px)) bottom 29px, left top, left top, left top, left top; } html[data-theme="dark"][data-theme-style="shiroko"] { @@ -62,48 +63,55 @@ html[data-theme="dark"][data-theme-style="shiroko"] { --tb-shadow: 0 1px 2px rgba(0, 0, 0, 0.34), 0 12px 28px -18px rgba(0, 0, 0, 0.58); --tb-shadow-hover: 0 1px 2px rgba(0, 0, 0, 0.40), 0 18px 40px -20px rgba(0, 0, 0, 0.68); + /* 深色不用浅色场景(白天教室压在深底上会很脏),回到纯色渐变 + 极淡纹样 */ --tb-page-image: linear-gradient(180deg, #161d26 0%, #141a22 60%, #11161d 100%); - --tb-page-pattern: url("/static/images/themes/shiroko/pattern-dark.svg?v=20261019p"); + --tb-page-pattern: url("/static/images/themes/shiroko/pattern-dark.svg?v=20261019q"); --tb-page-pattern-size: 340px 340px; - - /* 深色下人物整体关掉:浅色立绘在深底上会变成一块块亮斑,抢正文 */ --tb-deco: none, none, none, none, none, none; --tb-deco-size: auto, auto, auto, auto, auto, auto; --tb-deco-position: left top, left top, left top, left top, left top, left top; } -/* 卡片最宽 750px,两侧留白在 1000px 以下已经放不下整个人物, - 这时缩小并靠近边缘,让人物被卡片挡住一部分(读作「站在卡片后面」,比硬挤在留白里自然) */ -@media (max-width: 1179px) { - html[data-theme-style="shiroko"] { - --tb-deco-size: auto 280px, 104px 12px, auto, auto, auto, auto; - --tb-deco-position: left max(6px, calc(50% - 481px)) bottom 22px, - left max(6px, calc(50% - 457px)) bottom 16px, left top, left top, left top, left top; - } -} - -/* 窄屏卡片占满宽度,两侧没有视觉空间:人物退场,只留底色与纹样,顺带省掉 60KB 图片请求 */ +/* 窄屏:卡片占满宽度,两侧没有视觉空间 —— 换成竖版场景,人物退场 */ @media (max-width: 900px) { html[data-theme-style="shiroko"] { + --tb-page-image: url("/static/images/themes/shiroko/scene-mobile.webp?v=20261019q"); + --tb-surface: rgba(255, 255, 255, 0.92); --tb-deco: none, none, none, none, none, none; - --tb-page-pattern-size: 260px 260px; + --tb-deco-size: auto, auto, auto, auto, auto, auto; + --tb-deco-position: left top, left top, left top, left top, left top, left top; } } /* 组件微调(仅外观) */ -/* 白卡片压在近白底色上几乎看不出边界,补一圈 1px 冷调描边把它托起来(box-shadow 不占布局) */ +/* 磨砂:卡片与顶栏让场景透上来,才像"UI 浮在画面上"而不是压在照片上 */ html[data-theme-style="shiroko"] .uk-card-default { + backdrop-filter: blur(16px) saturate(1.05); + -webkit-backdrop-filter: blur(16px) saturate(1.05); box-shadow: 0 0 0 1px rgba(74, 127, 193, 0.12), var(--tb-shadow); } html[data-theme-style="shiroko"] .uk-card-default.uk-card-hover:hover { box-shadow: 0 0 0 1px rgba(74, 127, 193, 0.18), var(--tb-shadow-hover); } -html[data-theme="dark"][data-theme-style="shiroko"] .uk-card-default { - box-shadow: 0 0 0 1px rgba(111, 163, 224, 0.14), var(--tb-shadow); +html[data-theme-style="shiroko"] .uk-navbar-container:not(.uk-navbar-transparent) { + background-color: var(--tb-navbar); + backdrop-filter: blur(14px) saturate(1.1); + -webkit-backdrop-filter: blur(14px) saturate(1.1); } -/* 顶栏融进页面底色后,UIkit 默认的 #999 在灰蓝底上偏淡,提到次要文字色 */ +/* 深色不用半透明(背后没有场景,半透明只会让层次变浑),也不加模糊 */ +html[data-theme="dark"][data-theme-style="shiroko"] .uk-card-default { + backdrop-filter: none; + -webkit-backdrop-filter: none; + box-shadow: 0 0 0 1px rgba(111, 163, 224, 0.14), var(--tb-shadow); +} +html[data-theme="dark"][data-theme-style="shiroko"] .uk-navbar-container:not(.uk-navbar-transparent) { + backdrop-filter: none; + -webkit-backdrop-filter: none; +} + +/* 顶栏融进场景后,UIkit 默认的 #999 偏淡,提到次要文字色 */ html[data-theme-style="shiroko"] .uk-navbar-nav > li > a { color: var(--tb-text-secondary); } diff --git a/static/images/themes/shiroko/pattern-dark.svg b/static/images/themes/shiroko/pattern-dark.svg index 240b924..931d3d1 100644 --- a/static/images/themes/shiroko/pattern-dark.svg +++ b/static/images/themes/shiroko/pattern-dark.svg @@ -1,5 +1,5 @@ - + diff --git a/static/images/themes/shiroko/pattern.svg b/static/images/themes/shiroko/pattern.svg deleted file mode 100644 index 8c51904..0000000 --- a/static/images/themes/shiroko/pattern.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/static/images/themes/shiroko/scene-desktop.webp b/static/images/themes/shiroko/scene-desktop.webp new file mode 100644 index 0000000000000000000000000000000000000000..0540486d840fc2dbde5af0e4d6dbc68b7bdda673 GIT binary patch literal 22122 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 literal 0 HcmV?d00001 diff --git a/static/images/themes/shiroko/scene-mobile.webp b/static/images/themes/shiroko/scene-mobile.webp new file mode 100644 index 0000000000000000000000000000000000000000..42fe18bae457183cc77cd3faadf7d9a733021e73 GIT binary patch literal 6246 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