+ {screen === "home" && (
+
+
+
+
+
+ DAILY CHECK-IN
+ 开始今天的
状态评估
+ 填写三项基础信息,然后直接进入第一个小游戏。
+
+
+
+
+
+
+
+
{ resetAll(); openGame("symbol"); }}>开始评估
+
匿名完成,信息仅用于本次结果
+
+
+ 结果仅供自我了解,不构成医疗诊断或治疗建议。
+
+ )}
+
+ {screen === "complete" && (
+
+
+ {completedGameName}
+ 本项游戏已结束
+
+ {completionNext === "report" ? "查看结果" : "进入下一个游戏"}
+
+
+ )}
+
+ {screen === "profile" && (
+
+
+
+
+
BEFORE WE START
让报告更贴近你
这些信息只用于解释本次表现,不需要姓名、手机号或账号。
匿名完成不会建立公开个人档案
+
+
+
+
+
setScreen("overview")}>继续
+
+
+
+
+ )}
+
+ {screen === "overview" && (
+
+
+ YOUR ASSESSMENT
五项任务,逐步完成
每项开始前都有练习,不计入最终结果。
+
+ {[
+ { Icon: Speedometer, no: "01", title: "符号速配", domain: "处理速度", time: "60 秒", tone: "violet" },
+ { Icon: Path, no: "02", title: "交替连线", domain: "执行功能", time: "180 秒", tone: "mint" },
+ { Icon: Target, no: "03", title: "动态追踪", domain: "注意力", time: "60 秒", tone: "blue" },
+ { Icon: SquaresFour, no: "04", title: "购物记忆", domain: "工作记忆", time: "180 秒", tone: "coral" },
+ { Icon: ChartLineUp, no: "05", title: "零钱计算", domain: "计算能力", time: "约 2 分钟", tone: "blue" },
+ ].map(({ Icon, no, title, domain, time, tone }) => (
+ {no}{domain}{title}
{time}
+ ))}
+
+ 找一个安静的位置,保持浏览器全屏体验更佳。 { resetAll(); openGame("symbol"); }}>进入第一项
+
+ )}
+
+ {screen === "symbol" && (
+
+ setExitConfirm(true)} />
+
+
+
+
{symbolMap.map((symbol, number) =>
{number}
)}
+
{[1, 2, 3, 4, 5, 6, 7, 8, 9, 0].map((number) => )}
+
+
+
+ )}
+
+ {screen === "trail" && (
+
+ setExitConfirm(true)} />
+
+
+ {TRAIL_NODES.map((node, index) => {
+ const position = trailPositions[index];
+ const visibleIndex = intro === "trail" ? coachStep : trailIndex;
+ return ;
+ })}
+
+
+ )}
+
+ {screen === "attention" && (
+
+ setExitConfirm(true)} />
+
+ 寻找目标颜色{targetColor === "blue" ? "青绿色飞机" : "珊瑚色飞机"}{[0, 1, 2].map((life) => )}
+
+ {intro === "attention"
+ ?
+ : planes.map((plane) =>
)}
+ {DIRECTIONS.map((direction) => { const Icon = DIRECTION_ICONS[direction]; return ; })}
+
+
+ )}
+
+ {screen === "memory" && (
+
+ setExitConfirm(true)} />
+ {intro === "memory" &&
+
+ {listOpen && }
+ {intro !== "memory" && memoryPhase === "study" && SHOPPING LIST · ROUND {memoryRound}
记住需要购买的物品
正式选择时回看清单会记录次数与停留时长,并影响工作记忆评分。
第 {memoryRound} 轮{memoryTargets.length} 件物品{memoryTargets.map((index) =>

)}
{ setMemorySelected([]); setSeconds(MEMORY_ROUND_SECONDS[memoryRound]); setMemoryPhase("conveyor"); }}>我记好了 }
+ {intro !== "memory" && memoryPhase === "conveyor" &&
+ 购物清单{listOpen ? "收起" : "回看会影响评分"}{listOpen && {memoryTargets.map((index) => { const selected = memorySelected.includes(index); return
{selected && }; })}
}
+ {listOpen && }
+ {beltOrder.map((index, order) => { if (memoryRetired.includes(index)) return null; const item = FOODS[index]; const selected = memorySelected.includes(index); return
selectMemoryItem(index, event.currentTarget)}>
{selected && }; })}
+ }
+
+ )}
+
+ {screen === "money" && (
+
+ setExitConfirm(true)} />
+
+ {intro === "money" ? "找零试玩" : `EXACT CHANGE · ROUND ${moneyRound} / ${MONEY_ROUNDS.length}`}
组合正确的找零金额
商品价格 ¥{intro === "money" ? 7 : moneyQuestion.price}顾客付款 ¥{intro === "money" ? 10 : moneyQuestion.payment}
{intro === "money" ? "应找零 ¥3.00" : "请自行计算应找金额"}
+ 当前已选¥{cashTotal.toFixed(2)}{cash.map((value, index) =>
removeCash(index)} aria-label={`移除 ${value} 元`}>})
)}
{MONEY_OPTIONS.map((option) =>
intro === "money" ? completeMoneyDemo(option.value) : setCash((items) => [...items, option.value])} aria-label={`${option.value} 元`}>
)}
{intro !== "money" &&
提交找零}
+
+
+ )}
+
+ {screen === "report" && (
+
+
+ YOUR COGNITIVE SNAPSHOT
本次综合表现
以下结果结合准确率、完成度与错误情况生成。

综合得分{overall}/100
+ 完成度{averageCompletion}%正确操作{totalCorrect}错误操作{totalErrors}
+ {reportRows.map(([key, label, Icon]) => { const metric = metrics[key]; const value = metric.score || 70; return {label}{value}
正确{metric.correct}/{metric.total}错误{metric.errors}完成{metric.completion}%
{value >= 80 ? "表现稳定,速度和准确度配合较好。" : value >= 60 ? "整体平稳,仍有进一步提升空间。" : "波动较明显,建议休息后再尝试。"}
; })}
+
AI 指标总结{overall >= 80 ? "整体状态稳定" : overall >= 60 ? "整体状态平稳" : "本次表现存在波动"}
本次得分最高的维度是{strongestMetric},相对需要关注的是{improvementMetric}。购物记忆正式阶段回看清单 {memoryListViews.current} 次、累计 {memoryReviewSeconds} 秒,已作为工作记忆评分的扣分因素;零钱计算单独统计,不再混入购物记忆。
相对优势:{strongestMetric} 建议关注:{improvementMetric}
+ window.print()}>保存报告 { resetAll(); openGame("symbol"); }}>重新评估
+ 结果仅供自我了解与能力参考,不构成医疗或诊断建议。
+
+ )}
+
+ {feedback &&
{feedback === "correct" ? : }
}
+ {coach &&
}
+ {intro && demoReady &&
startGame(intro)} />}
+ {exitConfirm && 退出当前任务?
当前进度不会保留,你可以返回继续完成。
setExitConfirm(false)}>继续测试 { setExitConfirm(false); setIntro(null); setScreen("home"); }}>退出任务 }
+
+ );
+}
diff --git a/brain-h5/src/main.tsx b/brain-h5/src/main.tsx
new file mode 100644
index 0000000..9ff4f46
--- /dev/null
+++ b/brain-h5/src/main.tsx
@@ -0,0 +1,12 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import "@fontsource/roboto/latin-500.css";
+import App from "./App";
+import "./styles.css";
+import "./prototype.css";
+
+ReactDOM.createRoot(document.getElementById("root")!).render(
+