统一弹窗动画（2026-10-22）

范围口径
此前盘点的 51 类是业务分类，不是本次接入的独立视图数。同一活动可能同时包含入口弹窗、全屏页面和二级弹窗，按具体视图决定是否播放动画。

动画参数
集中配置：assets/Script/ActivityPopupAnimator.ts 的 POPUP_ANIMATIONS。
1. 淡入缩放（FadeScale）：仅小鱼干活动主弹窗。相对适配后的缩放 0.8 → 1、透明度 0 → 原始透明度，0.25 秒 sineOut；退场 1 → 0.8、透明度回到 0，0.25 秒 sineIn。
2. 回弹（Bounce）：其他纳入弹窗（含小鱼干到期结算）。保留当前调整值：相对缩放 1/2 → 16/15 → 1 → 1，每段 0.1 秒，依次 backOut / sineOut / sineOut。退场缩放反向：1 → 1 → 16/15 → 1/2，依次 sineIn / sineIn / backIn。透明度与缩放同时开始，复用 fade 的 0.25 秒及 sineOut / sineIn，入场 0 → 原始透明度、退场回到 0。

接入范围
- 首页：个人资料、地区选择、体力补充、体力礼包、设置、兑换码、七日礼包、首充礼包、每日任务、连胜、分享好友、月卡、月卡奖励、迁移进度选择/奖励、最大关卡提示。
- 活动：小鱼干主界面和到期结算、金币狂热主界面和结算、金字塔主界面和结算、百人赛入口和成功结算、小程序福利及其奖励展示。
- 战令：购买确认、到期结算及放弃确认、解锁展示。
- 扭蛋：头像和猫咪的奖励展示；主界面保持原状。
- 局内：暂停、失败/复活、放弃确认、体力不足、胜利、NewMode、玩法介绍、道具购买。
- 通用：RewardWindow、支付查询重试 ConfirmBox。支付、领取、解锁等业务锁仍由原组件保留。

排除范围
- 商店、排行榜、扭蛋主界面、战令主界面和战令介绍。
- 金币狂热帮助、金字塔概率说明、百人赛/步步高升活动说明、战令规则说明。
- 百人赛匹配、进度、淘汰、失败和过期等全屏页面。全屏指实际画面覆盖屏幕，深色遮罩不计入。
- 动态创建的资源加载失败/重试提示。

调用约定
- 管理器只负责动画类型、参数、自己的 tween 和旧回调取消。组件负责 active、遮罩、销毁和业务回调。
- 遮罩立即出现；本体退场完成后，调用方一起隐藏根节点/遮罩。遮罩不参加淡入、淡出或缩放。
- 有独立本体节点时直接传入。内容分散时，调用 popupContent(root, 排除的遮罩及独立子弹窗名称)，传入兄弟节点数组；管理器绕共同父节点原点同步位置和缩放，不改变原有节点路径。
- open/close 可以中途互相打断并从当前状态继续；重复 close 不重复回调。
- 原始缩放和透明度在开始时采样，不硬编码为 scale=1/opacity=255；布局重算前 cancel，完成布局后重新 open。
- 普通胜利、百人赛成功、奖励展示在本体入场后启动已有内部演出。后续场景切换/复活展示等待退场结束。

验证
- 本次英文枚举及回弹透明度调整：核心动画/生命周期/新玩法结算 13 项、百人赛入口动画 1 项通过；类型检查仍为原有 20 条诊断。回弹透明度复用 fade 的时长和缓动，保留用户调整的全部缩放参数。
- tools/test-popup-animator.cjs：参数、相对缩放、遮罩排除、打断、重复关闭、销毁和重布局。
- tools/test-popup-lifecycle.cjs：复活先退场后改变游戏状态，场景销毁保护，嵌套确认遮罩，支付重试框节点路径。
- 相关首页队列、连胜、介绍、七日礼包和结算测试已对照原版本；完整仓库类型检查仍有原有诊断，详见交付说明。
- 测试服实测只查询状态，未购买、领取或报名。当前账号小鱼干开放；金币狂热结束，金字塔无活动，百人赛挑战过期。动画验证使用查询快照和当前源码，真实 Cocos 引擎及项目预制体；百人赛入口由验证页手动展示，不改变账号状态。
- 前次引擎采样（调整回弹参数及新增回弹透明度之前，不代表当前参数效果）：小鱼干 scale 0.8/opacity 0 → scale 1/opacity 255；百人赛在当前适配下 scale 0.1247 → 0.8732，opacity 始终 255。入场、退场以及“入场中关闭再打开”期间遮罩 scale/opacity 均不变，未出现运行错误。
- 核心动画/生命周期/新玩法结算 12 项全部通过。首页队列 28 项、连胜 5 项全部通过。百人赛测试 35/39、战令结算 24/35、金字塔结算 10/11、小程序福利客户端 31/37，剩余失败项与修改前基线一致。类型检查仍为原有的 20 条诊断，没有新增诊断。
- 本次编辑器预览脚本缓存未随文件更新，验证页单独编译加载当前源码后再采样；未把旧缓存的显示效果作为本次动画验证结果。
