v0.6.0: mark Climperor Web shell and SEO milestone.
Brand title uses self-hosted Noto Serif SC; document minor vs patch SITE_VERSION bumps. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -224,7 +224,7 @@ python pc/evaluate.py
|
|||||||
- 改 GSI cfg 时同步核对 `pc/gsi_setup.py` 与 Dota `gamestate_integration` 目录。
|
- 改 GSI cfg 时同步核对 `pc/gsi_setup.py` 与 Dota `gamestate_integration` 目录。
|
||||||
- 改 Web 路由形态(URL 段 / query 参数 / 默认值)时同步 `web/frontend/router.js`(`parseHash` / `serializeHash`)与 `app.js` 的 `applyPatch` 校验;新增可路由状态维度时在两处都加,并在 `syncStateToUrl` 调用点(含搜索 debounce)接好。History 深度链接依赖 `web/frontend/_redirects`(Cloudflare)与 `web/serve_relations.py` 的 SPA fallback;预渲染路径变更时同步 `web/seo_prerender.py` 与导出文件列表(含 `router.js` / `_redirects` / `robots.txt`)。
|
- 改 Web 路由形态(URL 段 / query 参数 / 默认值)时同步 `web/frontend/router.js`(`parseHash` / `serializeHash`)与 `app.js` 的 `applyPatch` 校验;新增可路由状态维度时在两处都加,并在 `syncStateToUrl` 调用点(含搜索 debounce)接好。History 深度链接依赖 `web/frontend/_redirects`(Cloudflare)与 `web/serve_relations.py` 的 SPA fallback;预渲染路径变更时同步 `web/seo_prerender.py` 与导出文件列表(含 `router.js` / `_redirects` / `robots.txt`)。
|
||||||
- 改 `shared/data/heroes.json` 结构时同步 `shared/grid.py`(依赖 `attr` / `name_loc`);`roles` 供 `pc/overlay.py` 使用;`aliases` 为中文口语/俗称(勿与 `name_loc` 重复),重跑 `pc/fetch_cdn_templates.py` 会按 `key` 合并保留;`tags` 为中文定位(核心/辅助/…/幻象,由 `roles`+幻想系推导),上分帝 Web 筛选 + 局内 `draft_archetypes` 缺口/推进画像共用;基础属性/血蓝等数值字段供上分帝 Web 详情条,勿塞机制文案。
|
- 改 `shared/data/heroes.json` 结构时同步 `shared/grid.py`(依赖 `attr` / `name_loc`);`roles` 供 `pc/overlay.py` 使用;`aliases` 为中文口语/俗称(勿与 `name_loc` 重复),重跑 `pc/fetch_cdn_templates.py` 会按 `key` 合并保留;`tags` 为中文定位(核心/辅助/…/幻象,由 `roles`+幻想系推导),上分帝 Web 筛选 + 局内 `draft_archetypes` 缺口/推进画像共用;基础属性/血蓝等数值字段供上分帝 Web 详情条,勿塞机制文案。
|
||||||
- 发版上分帝 Web 时同步 bump `web/export_relations_site.py` 的 `SITE_VERSION`、`web/frontend/config.js` 的同名变量,以及 `index.html` 里 `style.css`/`mobile-gate.js`/`config.js`/`router.js`/`app.js` 的 `?v=` 缓存戳;并写 `CHANGELOG.md`。
|
- 发版上分帝 Web 时同步 bump `web/export_relations_site.py` 的 `SITE_VERSION`、`web/frontend/config.js` 的同名变量,以及 `index.html` 里 `style.css`/`mobile-gate.js`/`config.js`/`router.js`/`app.js` 的 `?v=` 缓存戳;并写 `CHANGELOG.md`。`SITE_VERSION` 语义:末位 = 增量 UI/修复;中段 = 壳层 / 路由 / 可索引或其它阶段性能力成型(如 `0.5.x` → `0.6.0`);数据-only 刷新不 bump。
|
||||||
- 不要重新引入 real 模板双层库、`cdn_penalty`、`build_library.py`。
|
- 不要重新引入 real 模板双层库、`cdn_penalty`、`build_library.py`。
|
||||||
|
|
||||||
## 文档分工
|
## 文档分工
|
||||||
|
|||||||
@@ -4,6 +4,13 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.6.0] - 2026-07-30
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- 站点版本升至 **0.6.0**:汇总 `0.5.x` 已成型能力——History 路径路由与 SEO/GEO 预渲染、设计令牌与顶栏壳、英雄页定位/详情布局、主播多平台与直播探测纠偏、monorepo 与刷新部署可靠性。此后增量 UI/文案仍抬末位;壳层、路由或可索引能力等阶段性成型再抬中段。
|
||||||
|
- 顶栏品牌「上分帝」改用思源宋体(Noto Serif SC)子集,气质更贴「帝」;正文仍为系统无衬线。
|
||||||
|
|
||||||
## [0.5.115] - 2026-07-30
|
## [0.5.115] - 2026-07-30
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -23,6 +23,12 @@ colors:
|
|||||||
panel-soft: "rgba(8, 12, 20, 0.55)"
|
panel-soft: "rgba(8, 12, 20, 0.55)"
|
||||||
on-accent: "#0B0D10"
|
on-accent: "#0B0D10"
|
||||||
typography:
|
typography:
|
||||||
|
brand:
|
||||||
|
fontFamily: "Noto Serif SC, Songti SC, STSong, SimSun, serif"
|
||||||
|
fontSize: 18px
|
||||||
|
fontWeight: 700
|
||||||
|
lineHeight: 1.3
|
||||||
|
letterSpacing: 0.16em
|
||||||
display:
|
display:
|
||||||
fontFamily: "Segoe UI, Microsoft YaHei UI, PingFang SC, sans-serif"
|
fontFamily: "Segoe UI, Microsoft YaHei UI, PingFang SC, sans-serif"
|
||||||
fontSize: 32px
|
fontSize: 32px
|
||||||
@@ -208,10 +214,13 @@ components:
|
|||||||
|
|
||||||
## Typography
|
## Typography
|
||||||
|
|
||||||
系统栈:`Segoe UI` + `Microsoft YaHei UI` + `PingFang SC`。中文优先清晰,不引入展示性装饰字体。
|
系统栈:`Segoe UI` + `Microsoft YaHei UI` + `PingFang SC`。正文与控件优先清晰,不引入全站装饰字体。
|
||||||
|
|
||||||
|
品牌例外:顶栏 / 移动端门禁的「上分帝」使用 `brand`(自托管 Noto Serif SC 子集,仅 U+4E0A / U+5206 / U+5E1D),宋体气质贴合「帝」字;正文仍走系统无衬线栈。禁止把衬线栈扩到导航、页标题或表格。
|
||||||
|
|
||||||
| Token | 用途 |
|
| Token | 用途 |
|
||||||
|-------|------|
|
|-------|------|
|
||||||
|
| `brand` | 仅品牌字标「上分帝」(顶栏 + mobile-gate) |
|
||||||
| `display` | 版本号等少数展示数字(约 32px,勿再放大到 40px) |
|
| `display` | 版本号等少数展示数字(约 32px,勿再放大到 40px) |
|
||||||
| `page-title` | 各顶层页标题(排行 / 走势 / 机制 / 主播 / 物品等) |
|
| `page-title` | 各顶层页标题(排行 / 走势 / 机制 / 主播 / 物品等) |
|
||||||
| `title-lg` / `title-md` | 区段标题、英雄名、物品名 |
|
| `title-lg` / `title-md` | 区段标题、英雄名、物品名 |
|
||||||
@@ -340,4 +349,4 @@ Valve 图标。支持多选筛选(`active`);选中英雄时,其定位以
|
|||||||
- Don't 把直播粉、胜负红、金价黄当作通用 CTA。
|
- Don't 把直播粉、胜负红、金价黄当作通用 CTA。
|
||||||
- Don't 为真移动端在现有碎片 `@media` 上硬撑;门禁解除前保持桌面壳。
|
- Don't 为真移动端在现有碎片 `@media` 上硬撑;门禁解除前保持桌面壳。
|
||||||
- Do 保持英雄底栏固定高与列表页整板滚动两种壳模型,勿发明第三种。
|
- Do 保持英雄底栏固定高与列表页整板滚动两种壳模型,勿发明第三种。
|
||||||
- Don't 在 data-only 刷新里 bump `SITE_VERSION`;视觉发版才同步 config / export / `?v=` 缓存戳。
|
- Don't 在 data-only 刷新里 bump `SITE_VERSION`;视觉发版才同步 config / export / `?v=` 缓存戳。末位用于增量改动;中段留给壳层 / 路由 / 可索引等阶段性成型(见 `AGENTS.md`)。
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ from shared.paths import (
|
|||||||
from seo_prerender import DEFAULT_SITE_ORIGIN, write_seo_bundle
|
from seo_prerender import DEFAULT_SITE_ORIGIN, write_seo_bundle
|
||||||
from serve_relations import WEB_DIR, build_payload
|
from serve_relations import WEB_DIR, build_payload
|
||||||
|
|
||||||
SITE_VERSION = "0.5.115"
|
SITE_VERSION = "0.6.0"
|
||||||
DEFAULT_OSS_BASE = "https://climperor.oss-cn-shanghai.aliyuncs.com"
|
DEFAULT_OSS_BASE = "https://climperor.oss-cn-shanghai.aliyuncs.com"
|
||||||
|
|
||||||
|
|
||||||
@@ -221,6 +221,9 @@ def main() -> None:
|
|||||||
src = WEB_DIR / name
|
src = WEB_DIR / name
|
||||||
if src.is_file():
|
if src.is_file():
|
||||||
shutil.copy2(src, out / name)
|
shutil.copy2(src, out / name)
|
||||||
|
fonts_src = WEB_DIR / "fonts"
|
||||||
|
if fonts_src.is_dir():
|
||||||
|
shutil.copytree(fonts_src, out / "fonts")
|
||||||
# Cloudflare Pages Functions (functions/api/*.js -> /api/*).
|
# Cloudflare Pages Functions (functions/api/*.js -> /api/*).
|
||||||
functions_src = WEB_DIR / "functions"
|
functions_src = WEB_DIR / "functions"
|
||||||
n_functions = 0
|
n_functions = 0
|
||||||
|
|||||||
@@ -21,3 +21,6 @@
|
|||||||
|
|
||||||
/style.css
|
/style.css
|
||||||
Cache-Control: public, max-age=300, must-revalidate
|
Cache-Control: public, max-age=300, must-revalidate
|
||||||
|
|
||||||
|
/fonts/*
|
||||||
|
Cache-Control: public, max-age=31536000, immutable
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Local defaults; production export overwrites via export_relations_site.py. */
|
/* Local defaults; production export overwrites via export_relations_site.py. */
|
||||||
var SITE_VERSION = "0.5.115";
|
var SITE_VERSION = "0.6.0";
|
||||||
var SITE_ORIGIN = "";
|
var SITE_ORIGIN = "";
|
||||||
var ABILITY_VIDEO_BASE = "";
|
var ABILITY_VIDEO_BASE = "";
|
||||||
var STATIC_ASSET_BASE = "";
|
var STATIC_ASSET_BASE = "";
|
||||||
|
|||||||
Binary file not shown.
@@ -43,8 +43,8 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<link rel="icon" href="/ui-icon/dota2_logo.png" type="image/png" />
|
<link rel="icon" href="/ui-icon/dota2_logo.png" type="image/png" />
|
||||||
<link rel="stylesheet" href="/style.css?v=0.5.115" />
|
<link rel="stylesheet" href="/style.css?v=0.6.0" />
|
||||||
<script src="/mobile-gate.js?v=0.5.115"></script>
|
<script src="/mobile-gate.js?v=0.6.0"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="sr-only">DOTA2 上分帝</h1>
|
<h1 class="sr-only">DOTA2 上分帝</h1>
|
||||||
@@ -232,8 +232,8 @@
|
|||||||
|
|
||||||
<section class="detail" id="detail" aria-live="polite"></section>
|
<section class="detail" id="detail" aria-live="polite"></section>
|
||||||
|
|
||||||
<script src="/config.js?v=0.5.115"></script>
|
<script src="/config.js?v=0.6.0"></script>
|
||||||
<script src="/router.js?v=0.5.115"></script>
|
<script src="/router.js?v=0.6.0"></script>
|
||||||
<script src="/app.js?v=0.5.115"></script>
|
<script src="/app.js?v=0.6.0"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
/* Typography */
|
/* Typography */
|
||||||
--font: "Segoe UI", "Microsoft YaHei UI", "PingFang SC", sans-serif;
|
--font: "Segoe UI", "Microsoft YaHei UI", "PingFang SC", sans-serif;
|
||||||
|
/* Brand mark only (「上分帝」); self-hosted Noto Serif SC subset */
|
||||||
|
--font-brand: "Noto Serif SC", "Songti SC", "STSong", "SimSun", serif;
|
||||||
--fs-display: 32px;
|
--fs-display: 32px;
|
||||||
--fs-page: 22px;
|
--fs-page: 22px;
|
||||||
--fs-title-lg: 18px;
|
--fs-title-lg: 18px;
|
||||||
@@ -65,6 +67,15 @@
|
|||||||
--focus-ring: 2px solid var(--sel);
|
--focus-ring: 2px solid var(--sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Noto Serif SC";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url("/fonts/noto-serif-sc-brand-700.woff2") format("woff2");
|
||||||
|
unicode-range: U+4E0A, U+5206, U+5E1D; /* 上分帝 */
|
||||||
|
}
|
||||||
|
|
||||||
* { box-sizing: border-box; }
|
* { box-sizing: border-box; }
|
||||||
html, body {
|
html, body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -196,6 +207,7 @@ body {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.brand-title {
|
.brand-title {
|
||||||
|
font-family: var(--font-brand);
|
||||||
font-size: var(--fs-title-lg);
|
font-size: var(--fs-title-lg);
|
||||||
font-weight: var(--fw-bold);
|
font-weight: var(--fw-bold);
|
||||||
letter-spacing: 0.16em;
|
letter-spacing: 0.16em;
|
||||||
@@ -4079,6 +4091,7 @@ html.mobile-client #mobile-gate {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.mobile-gate-brand-title {
|
.mobile-gate-brand-title {
|
||||||
|
font-family: var(--font-brand);
|
||||||
font-size: var(--fs-title-lg);
|
font-size: var(--fs-title-lg);
|
||||||
font-weight: var(--fw-bold);
|
font-weight: var(--fw-bold);
|
||||||
letter-spacing: 0.16em;
|
letter-spacing: 0.16em;
|
||||||
|
|||||||
Reference in New Issue
Block a user