feat(birth-sky): poster-only dialog, date/time/city caption, slower reveal, paywall on first refused send (P1–P5, BUG-1080)

TASK-birth-sky-polish-20260928.
- P1: chart page dialog shows only the picture on a dimmed stage, 「保存图片」 below, icon × in the corner.
- P2: BFF returns one server-built `caption` (「1994年5月18日 07:40 · 杭州」); printed under the fact line in all three places; adopted time adds 「 · 校正后」.
- P3: convergence 3 s + words 2.5 s + fade 1 s; settled frame still equals the exported cover.
- P4: redeem paywall no longer opens when the starter home appears; first send refused for credits opens it, later ones open billing; convergence dialog portalled to <body>. BUG-1080 investigating (Chrome repro rules out the overlay covering the convergence).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-09-29 00:03:46 +08:00
co-authored by Claude Opus 5.5
parent 1a4f77584b
commit dec36bce01
30 changed files with 670 additions and 165 deletions
+1 -12
View File
@@ -755,6 +755,7 @@ export default function Home() {
continueInNewChat,
refreshAccount,
openAccountDialog, openRectificationFromHomepage, openRectificationSession,
onboardingPaywallShown, setOnboardingPaywallOpen,
});
const jumpToLatestVisible = !rectificationSurfaceOpen
&& !starterHomeVisible
@@ -901,18 +902,6 @@ export default function Home() {
}
}, [accountId, activeAccountDialog, hydrated, onboardingStep, presetMessageFinished, profileComplete]);
useEffect(() => {
if (uiPreview.current
|| onboardingPaywallShown.current
|| !starterHomeVisible
|| !account
|| account.credits > 0
|| account.activeSubscription?.status === "active"
|| activeAccountDialog !== null) return;
onboardingPaywallShown.current = true;
setOnboardingPaywallOpen(true);
}, [account, activeAccountDialog, starterHomeVisible]);
useEffect(() => {
if (activeAccountDialog === null) return;
window.requestAnimationFrame(() => {