请实现一个以**自然选择、显隐性遗传和等位基因频率变化**为主题的二维交互可视化网页。

用户同时观察两座兔群小岛，在相同起点上设置不同的地表、捕食压力和突变概率，逐代观察群体组成与趋势。环境可以在运行中改变，变化从下一代生效；双岛与图表持续保留实际演化过程，帮助用户理解环境变化如何通过存活差异影响后代。

## 1. 核心操作与科学模型

采用单座位、二倍体、常染色体、完全显性的教学模型。B为棕毛显性等位基因，b为白毛隐性等位基因；BB、Bb为棕毛，bb为白毛。显性描述表型表达，不意味着更有利或频率更高。

本题计算**理想大种群的确定性频率期望**，不进行有限个体抽样，不模拟数量增长、灭绝或遗传漂变。兔子图标是群体组成示意，不是逐只生死的真实个体清单；这一模型说明在界面中容易找到。只研究毛色，不增加牙齿、耳长、多基因或迁入迁出。

每代出生时的状态为x=f(BB)、y=f(Bb)、z=f(bb)，和为1；b频率q=z+y/2，B频率p=1−q。白毛比例为z，棕毛比例为x+y，不能把q当成白毛比例。频率、概率、选择强度和代数均无量纲。

每座岛独立设置地表为草地或雪地，捕食选择强度s为0–0.80、步长0.05，突变概率μ为0–0.010、步长0.001，默认均为0。s和μ可通过滑块及精确输入设置。s=0时无毛色选择，草雪地不会自行改变基因频率；s>0时雪地的BB/Bb/bb存活权重为(1−s,1−s,1)，草地为(1,1,1−s)。这是伪装差异的教学参数，不是野外实测存活率。

每次“下一代”依次进行：

- **亲代选择**：W=x·wBB+y·wBb+z·wbb；选择后的基因型频率为各自加权频率除以W，b频率qₛ=(y·wBb/2+z·wbb)/W。
- **配子形成与突变**：每个等位基因以相同概率μ在B和b之间双向转换，q′=(1−μ)qₛ+μ(1−qₛ)。概率与环境需要无关；μ上限是方便观察的教学放大值，不能解释为真实兔类突变率。
- **随机配子结合**：下一代出生频率为x′=(1−q′)²、y′=2q′(1−q′)、z′=q′²。出生状态与选择后的亲代状态分开，后者不必满足随机结合比例。

两岛共享初始组成选择：“混合群体”(0.25,0.50,0.25)、“全为杂合棕毛”(0,1,0)、“仅有BB”(1,0,0)，默认混合群体；首次两岛均草地、s=0、μ=0。切换初始组成会让两岛从选定的第0代重新开始，各自环境设置保持不变。用户通过环境条件影响演化，不直接指定某一代的目标频率或把兔子变成目标毛色。

## 2. 核心交互与动态反馈

两座小岛同时可见，每岛的地表、捕食压力与突变概率在对应岛附近独立调节，只作用于该岛。操作时突出受影响的岛屿、条件标签与图线，另一岛保持自己的设置。代际推进、自动运行/暂停、初始组成选择及重新开始为两岛共享控制，作用范围通过位置与标签清楚表达，用户能直接比较两岛当前条件的异同。

环境可在运行或暂停时调整。场景即刻预览新地表或压力，并把尚未参与计算的值标为待生效；当前已出生群体和读数保持原状。下一次完整代际更新使用各岛当时最新设置，随后组成、基因型分布、频率读数与曲线同步更新，图上标出实际生效代。两次更新之间多次调节，以最后选择为准；历史数据不随编辑重算。

点选基因型图例或组成示意时，相关群体表示、表型对应和读数共同突出；趋势图悬停时显示指定代两岛的数值与条件提示，主场景保持当前状态。点击或触屏点按曲线上的历史代可进入只读观察：自动运行暂停，主场景、组成条和详情共同呈现该代，并醒目标记“历史·第g代”；最新模拟状态保留，不被倒退或覆盖。

历史观察时仍可辨认最新代位置，提供清楚的“回到当前”入口；返回后保持暂停，由用户决定是否继续。编辑环境、推进下一代或启动自动运行时，先退出历史观察，再对最新模拟状态生效；环境编辑继续遵循下一代生效的规则。初始组成选择与重新开始按第四节重建共同起点，用户自由决定条件、观察时长和比较方式。

## 3. 数值与视觉一致性

两岛场景、出生时基因型条、毛色比例、q与代际曲线来自相同状态。曲线共享代数与0–1频率标尺，q与白毛比例采用不同线型与图例；不能因为两岛独立缩放而制造差异。图标可近似表达比例，但精确频率保留在读数中，微小非零量用足够的小数或科学记数法表达。

每代完成后自动加入一个真实数据点，数据包含该代实际生效的条件。图中提示查看与历史观察遵循第二节的状态语义；当前与历史使用可辨标记，条件变化标记依附实际生效代。

地表变化不使成年棕兔瞬间变白。捕食示意表达相对存活差异，后代组成由科学模型更新；装饰动画与兔图标取整不决定频率。点击基因型图例或组成示意，可突出BB/Bb/bb及其表型映射，提示这是代表图标，不编造个体谱系。

## 4. 连续交互与状态恢复

代际控制让两岛每次一起更新，代数保持对齐。自动运行默认每秒1代，可选2或4代；倍率只改变展示节奏。单次推进与自动运行共用同一更新过程，重复操作不产生并发推进。

暂停立即停止新的代际更新，恢复从保留的最新状态继续。每次完成整代计算后再增加代数和曲线数据点；过渡动画只表达状态变化，不重复推进模型。读数明确对应已完成的出生代，环境调整与历史观察遵循第二节语义。

重新开始保留各岛当前选择的环境设置，从选定初始组成回到第0代，清空本次曲线、变化标记和历史选择，回到暂停状态；切换初始组成执行同样的重启。第0代仅表示初始组成，当前设置从随后第一次推进开始参与演化。自动曲线承担观察与比较，页面不设置手动存证或实验提交。

## 5. 科学反馈与结果解释

反馈随当前岛屿、参数与所选历史代变化：显示出生时组成、q、白毛比例及相对前一代的变化，必要时展开“亲代选择—配子—后代”的关系。两岛比较时说明当前哪些条件不同；同时改变多个因素时保留实际标记，不把结果强行归因于一个因素。

重点解释显性与适应性的区别、杂合子携带隐性等位基因，以及环境通过存活差异影响后代而不直接改变成年毛色。若μ=0且某等位基因已缺失，改变地表无法凭空恢复它；开启双向突变改变的是变异来源，不能说环境要求产生有利突变。

曲线变化缓慢、保持不变或改变方向时，结合现有组成和条件解释原因，例如没有选择压力、缺少可供筛选的变异或另有突变作用。明确这是频率期望模型，不能把单调的计算趋势说成所有有限真实种群每代必然发生的结果，也不能据此判断真实数量或灭绝。

## 6. 游戏风格、美学与可用性

**游戏风格：《Plague Inc.》式环境策略地图与趋势反馈，结合《SimEarth》的生态观察台。** 二维俯视的两座小岛构成统一观察场景，用户像在生态研究站比较两个环境；参考环境操控与地图信息组织，角色和素材自行创作。

- **场景与材质**：手绘海岸、草地与雪地、清楚的棕白兔形象和观察站标牌。两岛空间上可区分又构成整体，主图、代际趋势与简洁操纵台协调，避免被大量等权重卡片切碎。
- **科学操作的游戏化呈现**：可把草地/雪地环境牌拖到对应岛，或用清楚的点选入口切换；岛边捕食控制对应s，突变条件单独标明。滑块反馈就近出现，改变前后的条件容易比较，不能包装成定向升级兔子。
- **观察层次**：主场景呈现群体组成，趋势图呈现代际变化，按需展开的详情呈现选择、配子和后代关系。选中对象与历史代时，各表示联动突出对应信息，保持稳定布局。
- **颜色与信息层级**：岛A/B有稳定标识，棕/白毛配文字与图形，BB/Bb/bb用纹理或符号补充区分。q与白毛比例分列，代数、运行/暂停、待生效条件和历史查看状态易于扫读。
- **反馈动效**：地表材质平滑切换，捕食压力以边缘狼影或相对存活权重表达；一代完成后组成与曲线同步更新。后代重排体现代际更替，避免把同一成年兔定向染色；动效不覆盖图例或制造未计算的出生和死亡统计。

默认1440×900下两岛、主要控制及核心趋势可直接观察和操作，无需横向滚动；窄屏可上下排列两岛并纵向滚动。图表支持点选历史代，环境牌也有点击替代，标签与单位可读，解释可收起。状态不只依赖颜色，动效可减弱，音效可选且可静音；布局、绘图技术与代码结构自行设计。

## 7. 交付要求

提供完整可运行的纯前端网页，以`index.html`为入口，通过本地HTTP服务即可打开。附源码、运行说明和实际完成的自检说明，核心流程不依赖后端或外部网络，依赖与资源随项目提供。

界面中文，频率、概率、选择强度和代数的含义明确。内部命名、算法及绘图技术自行选择，未完成或未验证部分如实说明。
