diff --git a/README.md b/README.md
index b525daf..0b4997c 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ TokenStep 是一个 macOS 菜单栏 App,用来本地统计你在 Codex、Claud
下载最新版 DMG,打开后把 `TokenStep.app` 拖进「应用程序」即可使用:
-[下载 TokenStep 最新版](https://github.com/Backtthefuture/TokenStep/releases/latest/download/TokenStep-0.2.9.dmg)
+[下载 TokenStep 最新版](https://github.com/Backtthefuture/TokenStep/releases/latest/download/TokenStep-0.2.10.dmg)
也可以从 Release 页面查看所有版本:
@@ -32,6 +32,16 @@ TokenStep 已使用 Developer ID 签名并通过 Apple 公证。首次打开时
Windows版本由十七做了移植,欢迎大家前往使用:https://github.com/canyexuanfan/TokenStep-Windows/releases
+## 0.2.10 更新:坠入黑洞的运镜方向
+
+0.2.10 修正了坠落模式的逼近方向:膨胀锚点从画面中部移到**黑洞本体**(左上视界阴影处),让黑洞成为整个画面的放射原点——所有元素从它向外流走,右侧弧线不断放大、冲出画面右缘,弧顶顺流右移,读起来就是"视角正在被吸进去",而不是画面整体向上顶。
+
+
+
+
+
+速度与强度维持 0.2.9 的节奏(9 秒吞没、亮度渐强 +16%),帧差指标进一步提升:前 3 秒全画面 31.5%、全程 69.1% 的像素发生明显变化。其余模式、主题与数据口径不变。完整说明见 [0.2.10 发布说明](docs/RELEASE_NOTES_0.2.10.md)。
+
## 0.2.9 重大更新:引力动效实验室
0.2.9 给「引力边界」主题装上了真正的引力动效。黑洞不再是一张静态壁纸:打开浮层或仪表盘的瞬间,你就在朝它坠落。
@@ -128,7 +138,7 @@ TokenStep 第一次从“更换配色”升级为完整的**主题皮肤包系
- 新增奥德赛弓箭阶梯 Logo;用量采用骨金、冷金或余烬橙,绿色只保留给同步成功等状态反馈。
- 关闭排行榜后浮层会自动收短,多来源额度则使用紧凑布局完整展示。
-打开 `设置 → 通用 → 主题皮肤包` 即可切换。完整说明见 [0.2.4 发布说明](docs/RELEASE_NOTES_0.2.4.md),或直接[下载已签名并通过 Apple 公证的最新版](https://github.com/Backtthefuture/TokenStep/releases/latest/download/TokenStep-0.2.9.dmg)。
+打开 `设置 → 通用 → 主题皮肤包` 即可切换。完整说明见 [0.2.4 发布说明](docs/RELEASE_NOTES_0.2.4.md),或直接[下载已签名并通过 Apple 公证的最新版](https://github.com/Backtthefuture/TokenStep/releases/latest/download/TokenStep-0.2.10.dmg)。
## TokenStep 适合谁?
@@ -187,7 +197,7 @@ TokenStep 默认只做本地统计。
## 安装方式
-1. 下载 [TokenStep 最新版 DMG](https://github.com/Backtthefuture/TokenStep/releases/latest/download/TokenStep-0.2.9.dmg)。
+1. 下载 [TokenStep 最新版 DMG](https://github.com/Backtthefuture/TokenStep/releases/latest/download/TokenStep-0.2.10.dmg)。
2. 打开 DMG。
3. 把 `TokenStep.app` 拖到「应用程序」。
4. 启动 TokenStep。
@@ -247,7 +257,7 @@ TokenStepSwift/dist/TokenStep.app
Developer ID 签名:
```bash
-TOKENSTEP_VERSION=0.2.9 \
+TOKENSTEP_VERSION=0.2.10 \
CODE_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
./script/package_release.sh
```
@@ -255,7 +265,7 @@ CODE_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
签名 + Apple 公证:
```bash
-TOKENSTEP_VERSION=0.2.9 \
+TOKENSTEP_VERSION=0.2.10 \
CODE_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
TOKENSTEP_NOTARY_PROFILE="tokenstep-notary" \
./script/package_release.sh --notarize
@@ -270,7 +280,7 @@ release/TokenStep-.dmg
维护者说明见 [docs/RELEASE.md](docs/RELEASE.md)。
-0.2.9 发布说明见 [docs/RELEASE_NOTES_0.2.9.md](docs/RELEASE_NOTES_0.2.9.md);0.2.8 发布说明见 [docs/RELEASE_NOTES_0.2.8.md](docs/RELEASE_NOTES_0.2.8.md);0.2.7 发布说明见 [docs/RELEASE_NOTES_0.2.7.md](docs/RELEASE_NOTES_0.2.7.md);引力边界实现说明见 [docs/INTERSTELLAR_THEME_PACK_0.2.7.md](docs/INTERSTELLAR_THEME_PACK_0.2.7.md);0.2.6 更新闭环说明见 [docs/RELEASE_NOTES_0.2.6.md](docs/RELEASE_NOTES_0.2.6.md);0.2.4 奥德赛主题包说明见 [docs/ODYSSEY_THEME_PACK_0.2.4.md](docs/ODYSSEY_THEME_PACK_0.2.4.md)。
+0.2.10 发布说明见 [docs/RELEASE_NOTES_0.2.10.md](docs/RELEASE_NOTES_0.2.10.md);0.2.9 发布说明见 [docs/RELEASE_NOTES_0.2.9.md](docs/RELEASE_NOTES_0.2.9.md);0.2.8 发布说明见 [docs/RELEASE_NOTES_0.2.8.md](docs/RELEASE_NOTES_0.2.8.md);0.2.7 发布说明见 [docs/RELEASE_NOTES_0.2.7.md](docs/RELEASE_NOTES_0.2.7.md);引力边界实现说明见 [docs/INTERSTELLAR_THEME_PACK_0.2.7.md](docs/INTERSTELLAR_THEME_PACK_0.2.7.md);0.2.6 更新闭环说明见 [docs/RELEASE_NOTES_0.2.6.md](docs/RELEASE_NOTES_0.2.6.md);0.2.4 奥德赛主题包说明见 [docs/ODYSSEY_THEME_PACK_0.2.4.md](docs/ODYSSEY_THEME_PACK_0.2.4.md)。
## 开源协议
diff --git a/TokenStepSwift/Sources/TokenStepSwift/Views/InterstellarMotionLab.swift b/TokenStepSwift/Sources/TokenStepSwift/Views/InterstellarMotionLab.swift
index 3603d7d..174b9b3 100644
--- a/TokenStepSwift/Sources/TokenStepSwift/Views/InterstellarMotionLab.swift
+++ b/TokenStepSwift/Sources/TokenStepSwift/Views/InterstellarMotionLab.swift
@@ -120,14 +120,14 @@ struct InterstellarMotionSample: Equatable {
/// Approach travel range over `approachDuration`; free-floating layers ride at 1.7x.
/// The arc-glued hotspot scales with the plate so it never detaches from the disk.
- /// The pivot sits at the heart of the baked structure so the hole swells in
- /// place — edges rush out of frame while the arc crest climbs toward the top,
- /// which reads as the camera falling in rather than the plate sliding away.
- /// A gentle brightness swell rides along: closing in on a blazing disk.
+ /// The pivot sits on the black hole itself (upper-left, near the shadow), so the
+ /// dive reads as the camera falling INTO the hole: every feature streams outward
+ /// from that vanishing point, and the right-hand arc — the dominant landmark —
+ /// swells and rushes past the right edge of the frame.
static let approachScaleRange: CGFloat = 0.36
static let approachEaseExponent: CGFloat = 1.2
static let approachBrightnessRange: Double = 0.16
- static let approachAnchor = UnitPoint(x: 0.46, y: 0.28)
+ static let approachAnchor = UnitPoint(x: 0.30, y: 0.05)
var primaryPhase: CGFloat
var secondaryPhase: CGFloat
diff --git a/docs/RELEASE_NOTES_0.2.10.md b/docs/RELEASE_NOTES_0.2.10.md
new file mode 100644
index 0000000..2d3d657
--- /dev/null
+++ b/docs/RELEASE_NOTES_0.2.10.md
@@ -0,0 +1,26 @@
+# TokenStep 0.2.10
+
+TokenStep 0.2.10 reworks the plunge approach of the Event Horizon gravity motion so it reads as falling into the black hole rather than the frame drifting upward.
+
+## The pivot now sits on the black hole
+
+- The approach zoom pivot moves from mid-canvas to the hole itself — the event-horizon shadow in the upper-left — making the hole the vanishing point of the dive.
+- Every feature streams radially outward from the hole: the right-hand arc, the dominant landmark, swells and rushes past the right edge of the frame; the arc crest flows rightward along the top band (measured +256 px within 6 seconds); the lower arcs sweep out of frame.
+- There is no whole-frame translation in any direction; the region that barely moves is the hole itself, because that is what the camera is falling toward.
+
+## Speed and intensity unchanged
+
+- The dive keeps the 0.2.9 rhythm: 9 seconds to full closest approach with a hold at the end, up to 36% scale travel and a 16% brightness swell.
+- Frame-diff perceptibility improves to 31.5% of the frame beyond an 8/255 delta within the first 3 seconds and 69.1% across the full dive (0.2.9: 26.9% / 64.0%).
+
+## Compatibility and scope
+
+- Quiet and Orbit modes, the hotspot orbit, the token plunge pulse, and the popover selector are unchanged.
+- Classic and Odyssey theme packs are unchanged.
+- Token, cost, quota, leaderboard, updater, and local collection behavior are unchanged.
+
+## Validation
+
+- Swift unit suite: 113 tests, 0 failures.
+- Deterministic motion-lab renders re-measured at 1800 × 1118; direction verified by patch tracking (crest flows right, right-arc exits the frame by the end of the dive).
+- Developer ID signing, Apple notarization, stapling, DMG validation, and isolated installer verification remain release gates.
diff --git a/docs/images/tokenstep-0.2.10-motion-lab-plunge.gif b/docs/images/tokenstep-0.2.10-motion-lab-plunge.gif
new file mode 100644
index 0000000..370b6af
Binary files /dev/null and b/docs/images/tokenstep-0.2.10-motion-lab-plunge.gif differ
diff --git a/script/build_swiftui_and_run.sh b/script/build_swiftui_and_run.sh
index 9656927..fe1b455 100755
--- a/script/build_swiftui_and_run.sh
+++ b/script/build_swiftui_and_run.sh
@@ -23,7 +23,7 @@ HELPER_EXECUTABLE="$BUILD_DIR/$HELPER_NAME"
ICON_FILE="$ROOT_DIR/TokenUsageMenuApp/assets/TokenStepIcon.icns"
ODYSSEY_ASSET_DIR="$ROOT_DIR/TokenUsageMenuApp/assets/odyssey"
INTERSTELLAR_ASSET_DIR="$ROOT_DIR/TokenUsageMenuApp/assets/interstellar"
-VERSION="${TOKENSTEP_VERSION:-0.2.9}"
+VERSION="${TOKENSTEP_VERSION:-0.2.10}"
LAUNCH=true
VERIFY=false