diff --git a/static/index.html b/static/index.html
index 7dfe39a7..01246398 100644
--- a/static/index.html
+++ b/static/index.html
@@ -2766,7 +2766,8 @@ const renderRegimeRow = (s, rg, bkKey) => {
const rGradeBadge = rGrade && rGrade !== 'ok' && rGrade !== 'good' && rGrade !== 'great' ? '' : '';
// 2026-08-18 按温区判定激活(而非全局 s.current)——该策略在当前表温区 rg 是否激活
const isActive = window._isActRegime(s, rg);
- const _bkAttr = bkKey ? ' data-bk="' + bkKey + '" class="hidden"' : '';
+ // 2026-08-18 展开持久化:读 localStorage 决定备选行是否 hidden(非总是折叠)
+ const _bkAttr = bkKey ? ' data-bk="' + bkKey + '"' + (window._bkOpen(bkKey) ? '' : ' class="hidden"') : '';
return '
' +
'| ' + s.version + ' ' + rStateBadge + ((s.market && s.market !== 'all') ? ' ' + (s.market === 'hk' ? '港' : 'A') + '' : '') + ' | ' +
'' + (s.name || '') + (smallSample ? ' ⚠️' : '') + ' ' +
@@ -2882,7 +2883,7 @@ const renderRegimeRow = (s, rg, bkKey) => {
if (backup.length) {
html += ' |
| ' +
' |
';
+ '' + (window._bkOpen(marketLabel + rg) ? '\u25bc' : '\u25b6') + ' 备选 (资格达标未激活, ' + backup.length + ') 点击展开';
// 2026-08-17 修复:备选行直接进同一 tbody(renderRegimeRow 传 bkKey, 行加 data-bk+hidden),列宽与表头对齐
html += backup.map(s => renderRegimeRow(s, rg, marketLabel + rg)).join('');
}
@@ -2898,7 +2899,10 @@ const renderRegimeRow = (s, rg, bkKey) => {
const hidden = rows[0].classList.contains('hidden');
rows.forEach(r => r.classList.toggle('hidden'));
if (arrow) arrow.textContent = hidden ? '\u25bc' : '\u25b6';
+ // 2026-08-18 展开状态持久化(刷新保留)
+ try { localStorage.setItem('bk_open_' + key, hidden ? '1' : '0'); } catch(e) {}
};
+ window._bkOpen = function(key) { try { return localStorage.getItem('bk_open_' + key) === '1'; } catch(e) { return false; } };
// ── 2026-08-15 按市场×温区展示:6表格 = A股当前市 → 港股当前市 → A股其他2市 → 港股其他2市,
// 每表格列出该市场在该温区有数据的所有可用策略(含未激活,按该温区胜率降序),激活策略高亮;温度并入当前市标题尾部
const usableStrats = strategies.filter(s => s.current === true || s.state === 'available');